Je vois que dans MySQL il y a des fonctions Cast()
et Convert()
pour créer des entiers à partir de valeurs, mais est-il possible de vérifier si une valeur est un entier? Quelque chose comme is_int()
en PHP est ce que je cherche.Comment vérifier si une valeur est un entier dans MySQL?
Répondre
Je suppose que vous voulez vérifier une valeur de chaîne. Un bon moyen est l'opérateur REGEXP, en faisant correspondre la chaîne à une expression régulière. Faites simplement
select field from table where field REGEXP '^-?[0-9]+$';
ceci est raisonnablement rapide. Si votre champ est numérique, il suffit de tester
ceil(field) = field
à la place.
Le « Ceil (champ) = champ » test est une bonne idée, mais comme l'a souligné @Jumpy, elle échoue sur les données non numériques: SELECT ceil ('four') = 'four'; -> 1 –
@MatthewCornell, Il a dit que si votre champ est numérique. C'est ainsi que vous pouvez tester si un nombre est un nombre entier. Cela ne fonctionnera pas sur les chaînes, c'est pourquoi la première option est là. – Malfist
Si les données peuvent inclure des espaces, cela échouera. Pensez à tester trim (field), éventuellement avec un argument supplémentaire pour supprimer les nouvelles lignes. –
Correspond à une expression régulière.
c.f. http://forums.mysql.com/read.php?60,1907,38488#msg-38488 comme cité ci-dessous:
Re: clause IsNumeric() dans MySQL?
Publié par: kevinclark()
: 08 Août, 2005 13:01
Je suis d'accord. Voici une fonction que j'ai créé pour MySQL 5:
CREATE FUNCTION IsNumeric (sIn varchar(1024)) RETURNS tinyint
RETURN sIn REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
Cela permet un signe optionnel plus/moins au début, un point décimal en option, et les chiffres numériques reste.
Merci, votre solution prend soin de décimales également – Ananda
Voici la solution simple pour elle en supposant que le type de données est varchar
select * from calender where year > 0
Il retourne vrai si l'année est numérique autre faux
J'ai essayé d'utiliser les expressions régulières énumérées ci-dessus, mais ils ne fonctionnent pas pour les éléments suivants:
SELECT '12 INCHES' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
ci-dessus retournera 1
(TRUE
), ce qui signifie que le test de la chaîne '12 INCHES 'par rapport à l'expression régulière ci-dessus renvoie TRUE
. Il ressemble à un nombre basé sur l'expression régulière utilisée ci-dessus. Dans ce cas, parce que le 12 est au début de la chaîne, l'expression régulière l'interprète comme un nombre.
qui suit retourne la bonne valeur (c.-à-0
) parce que la chaîne commence par les caractères au lieu de chiffres
SELECT 'TOP 10' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
ci-dessus retournera 0
(FALSE
) parce que le début de la chaîne est un texte et non numérique . Toutefois, si vous traitez des chaînes composées d'un mélange de chiffres et de lettres commençant par un nombre, vous n'obtiendrez pas les résultats souhaités. REGEXP interprétera la chaîne comme un nombre valide alors que ce n'est pas le cas.
Ceci est incorrect. Avez-vous testé? Quand je lance votre premier exemple, il renvoie 'FALSE', comme prévu, car l'expression régulière se termine par' $ ', ce qui signifie la fin de la chaîne, donc elle vérifie seulement les nombres, comme prévu par l'auteur. – spikyjt
Qu'en est-:
WHERE table.field = "0" or CAST(table.field as SIGNED) != 0
pour tester numérique et le corrolaire:
WHERE table.field != "0" and CAST(table.field as SIGNED) = 0
CAST (table.field)! = 0 ne fonctionnera pas car il a besoin d'un type à lancer. – Riad
Cela fonctionne parfaitement si vous devez tester des éléments non numériques, cela mérite plus de +1. Les autres réponses sont plus difficiles à inverser le test pour trouver les éléments non numériques. – DrCord
Ceci ne fonctionne pas pour les nombres comme "0000", "0" (espace) et "7x" (qui est considéré comme un nombre). –
Supposons que nous avons colonne avec champ alphanumériques ayant des entrées comme
a41q
1458
xwe8
1475
asde
9582
.
.
.
.
.
qe84
et que vous voulez le plus valeur numérique de cette colonne db (dans ce cas, il est 9582) alors cette requête vous aidera
SELECT Max(column_name) from table_name where column_name REGEXP '^[0-9]+$'
* '10000' * est plus élevé, mais votre requête retournera toujours * '9582' *. –
Cela fonctionne aussi:
CAST(coulmn_value AS UNSIGNED) // will return 0 if not numeric string.
par exemple
SELECT CAST('a123' AS UNSIGNED) // returns 0
SELECT CAST('123' AS UNSIGNED) // returns 123 i.e. > 0
qu'en est-il de 'SELECT CAST ('12a34' AS UNSIGNED)', qui renvoie '12'? –
Cela fonctionne parfaitement si vous devez tester des éléments non-numériques, cela mérite plus de +1. Les autres réponses sont plus difficiles à inverser le test pour trouver les éléments non numériques. – DrCord
@DrCord cela ne fonctionne pas pour l'affaire Mike C décrit, donc très peu fiable – jontro
Pour vérifier si une valeur est Int Mysql, nous pouvons utiliser la requête suivante. Cette requête donnera les lignes avec Int valeurs
SELECT col1 FROM table WHERE concat('',col * 1) = col;
Cette réponse a fonctionné pour moi. – Pupil
Cela sélectionnera également des nombres non entiers (par exemple * '3.5' *). –
Cela fonctionne bien pour VARCHAR où il commence par un nombre ou non ..
WHERE concat('',fieldname * 1) != fieldname
peut avoir des restrictions quand vous arrivez à la plus grande NNNNE + - numéros
pour moi la seule chose qui fonctionne est:
CREATE FUNCTION IsNumeric (SIN VARCHAR(1024)) RETURNS TINYINT
RETURN SIN REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
de kevinclark tout autre retour des choses inutiles pour moi en cas de 234jk456
ou 12 inches
- 1. Comment vérifier si une valeur est un entier avec plpgsql?
- 2. Comment vérifier si une valeur donnée est une liste générique?
- 3. Comment vérifier si une valeur de matrice profonde est présente
- 4. Comment vérifier si l'entrée mysql est vide dans PhP?
- 5. Comment vérifier si elle renvoie une valeur nulle?
- 6. vérifier si une chaîne est un double
- 7. Comment puis-je vérifier si une chaîne contient un nombre inférieur à un nombre entier?
- 8. Comment vérifier si une valeur est listée dans une base de données en utilisant MySQL et PHP?
- 9. Comment vérifier si une session est invalide
- 10. Si textBox1 contient un entier
- 11. Comment vérifier si la requête MySQL est valide sans l'exécuter?
- 12. Comment vérifier si un pointeur est valide?
- 13. Comment vérifier si FileObject est un dossier?
- 14. Vérifier une valeur dans un objet JSON
- 15. Vérifier si un élément est dans une séquence
- 16. Comment vérifier si la représentation binaire d'un entier est un palindrome?
- 17. Comment détecter si un nombre donné est un nombre entier?
- 18. Valeur décimale Vérifier si zéro
- 19. Dans Emacs Lisp, comment vérifier si une variable est définie?
- 20. Comment vérifier si une chaîne est vide dans Emacs Lisp?
- 21. Comment vérifier si un caractère Java est un symbole monétaire
- 22. Plugin jQuery Validation: comment vérifier si un élément est valide?
- 23. Comment vérifier si une variable existe dans un modèle FreeMarker?
- 24. C# UDP vérifier si j'ai reçu le paquet entier?
- 25. AS3: Vérifier si un dictionnaire est vide
- 26. Comment vérifier si une date s'est écoulée
- 27. vérifier si un tableau est multidimensionnel
- 28. Dans MySQL procédures stockées vérifier si une variable locale est nulle
- 29. Comment vérifier si une valeur de chaîne de requête est présente via javascript
- 30. Comment puis-je vérifier si une structure a été initialisée?
donc nous devons malheureusement créer la fonction is_int() Mysql –