Comment puis-je vérifier si une valeur est un nombre entier dans MySQL?
Je vois que dans MySQL il y a Cast()
et Convert()
des fonctions pour créer des nombres entiers de valeurs, mais est-il possible de vérifier si une valeur est un nombre entier? Quelque chose comme is_int()
en PHP est ce que je suis à la recherche d'.
- donc, malheureusement, nous devons créer is_int() fonction Mysql
Vous devez vous connecter pour publier un commentaire.
Je vais supposer que vous voulez vérifier une valeur de chaîne. Une belle façon est l'expression de l'opérateur, correspondant de la chaîne à une expression régulière. Tout simplement
c'est assez rapide. Si votre champ est numérique, il suffit de tester pour
à la place.
Il correspond à une expression régulière.
c.f. http://forums.mysql.com/read.php?60,1907,38488#msg-38488 comme cité ci-dessous:
Supposons que nous avons colonne de champ alphanumérique ayant des entrées comme
et vous voulez la valeur numérique la plus élevée à partir de cette base de colonne (dans ce cas, il est 9582), alors cette requête va vous aider à
Ici est la solution la plus simple pour elle
en supposant que les données sont de type varchar
Il retournera true si l'année est numérique sinon false
Cela fonctionne aussi:
par exemple
SELECT CAST('12a34' AS UNSIGNED)
, qui renvoie12
?SELECT (CAST("1.1" AS UNSIGNED));
sera également imprimer 1 un flotteur n'est pas un int..Pour vérifier si une valeur est de type Int dans Mysql, on peut utiliser la requête suivante.
Cette requête va donner des lignes avec des valeurs Int
Ce sujet:
de test pour le numérique et corrolary:
Le meilleur que j'ai pu penser à une variable est de type int Est une combinaison avec MySQL fonctions
CAST()
etLENGTH()
.Cette méthode fonctionne pour les chaînes de caractères, entiers, doubles, de flotteurs les types de données.
voir démo http://sqlfiddle.com/#!9/ff40cd/44
Vrai Waqas Malik totalement fogotten pour tester cette affaire. le patch est.
Résultats
voir démo
SELECT "a", (LENGTH(CAST("a" AS UNSIGNED))) = CASE WHEN CAST("a" AS UNSIGNED) = 0 THEN CAST("a" AS UNSIGNED) ELSE (LENGTH("a")) END AS is_int;
J'ai essayé d'utiliser les expressions régulières énumérés ci-dessus, mais ils ne travaillent pas pour la suite:
La ci-dessus sera de retour
1
(TRUE
), ce qui signifie que le test de la chaîne "12 POUCES" à l'encontre de l'expression régulière ci-dessus, renvoieTRUE
. Il ressemble à un nombre en fonction de l'expression régulière ci-dessus. Dans ce cas, parce que le 12 est au début de la chaîne, l'expression régulière interprète comme un nombre.Le suivant sera le retour de la juste valeur (c'est à dire
0
) parce que la chaîne commence avec des personnages au lieu de chiffresLa ci-dessus sera de retour
0
(FALSE
) parce que le début de la chaîne de texte et non pas numérique.Toutefois, si vous traitez avec des chaînes qui ont un mélange de chiffres et de lettres qui commencent par un chiffre, vous n'obtiendrez pas les résultats que vous voulez. REGEXP va interpréter la chaîne comme un numéro valide, alors qu'en fait il ne l'est pas.
FALSE
, comme prévu, parce que la regex se termine avec$
ce qui signifie la fin de la chaîne, de sorte qu'il vérifie seulement des nombres, comme prévu par l'auteur.Cela fonctionne bien pour les VARCHAR où il commence par un numéro ou pas..
peuvent avoir des restrictions quand vous obtenez la plus grande NNNNE+- nombre
pour moi, la seule chose qui fonctionne est:
de kevinclark tous les autres de retour de trucs inutiles pour moi en cas de
234jk456
ou12 inches