Veo que dentro de MySQL hay funciones Cast()
y Convert()
para crear enteros a partir de valores, pero ¿hay alguna manera de verificar si un valor es un número entero? Algo así como is_int()
en PHP es lo que estoy buscando.¿Cómo verifico si un valor es un número entero en MySQL?
Respuesta
Asumiré que desea comprobar un valor de cadena. Una buena forma es el operador REGEXP, que combina la cadena con una expresión regular. Simplemente haga
select field from table where field REGEXP '^-?[0-9]+$';
esto es bastante rápido. Si su campo es numérico, simplemente realice una prueba para
ceil(field) = field
en su lugar.
El 'ceil (campo) = campo' la prueba es una buena idea, pero como @Jumpy señaló, falla en datos no numéricos: SELECT ceil ('four') = 'four'; -> 1 –
@MatthewCornell, Dijo si su campo es numérico. Eso es para que puedas probar si un número es un número entero. No funcionará en cadenas, por eso la primera opción está ahí. – Malfist
Si los datos pueden incluir espacios en blanco, esto fallaría. Considere la prueba de recorte (campo), posiblemente con una arg extra para eliminar las nuevas líneas. –
Combínalo con una expresión regular.
c.f. http://forums.mysql.com/read.php?60,1907,38488#msg-38488 como se cita a continuación:
Re: IsNumeric() cláusula en MySQL ??
Publicado por: kevinclark()
Fecha: 08 de agosto de, de 2005 13:01
estoy de acuerdo. Aquí es una función que he creado para 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]+)$';
Esto permite un signo opcional de más/menos al comienzo, un punto decimal opcional y los dígitos numéricos de descanso.
Gracias, su solución se encarga de decimales también – Ananda
Aquí está la solución simple para que suponiendo que el tipo de datos es VARCHAR
select * from calender where year > 0
Se devolverá verdadero si el año es numérico y false
He intentado usar las expresiones regulares mencionados anteriormente, pero no funcionan para lo siguiente:
SELECT '12 INCHES' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
el anterior devolverá 1
(TRUE
), que significa la prueba de la cadena '12 PULGADAS 'contra la expresión regular anterior, devuelve TRUE
. Parece un número basado en la expresión regular utilizada anteriormente. En este caso, como el 12 está al principio de la cadena, la expresión regular lo interpreta como un número.
El siguiente devolverá el valor correcto (es decir 0
) debido a que la cadena comienza con caracteres en lugar de dígitos
SELECT 'TOP 10' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
Lo anterior regresará 0
(FALSE
) debido a que el principio de la cadena es el texto y no es numérico .
Sin embargo, si se trata de cadenas que tienen una combinación de números y letras que comienzan con un número, no obtendrá los resultados que desea. REGEXP interpretará la cadena como un número válido cuando en realidad no lo es.
Esto es incorrecto. ¿Lo has probado? Cuando ejecuto su primer ejemplo, devuelve 'FALSE', como se esperaba, porque la expresión regular termina con' $ ', lo que significa el final de la cadena, por lo que solo comprueba los números, según lo previsto por el autor. – spikyjt
¿Qué hay de:
WHERE table.field = "0" or CAST(table.field as SIGNED) != 0
a prueba para numérico y el corolario:
WHERE table.field != "0" and CAST(table.field as SIGNED) = 0
CAST (table.field)! = 0 no funcionará ya que necesita un tipo para transmitir. – Riad
Esto funciona perfecto si necesita probar elementos no numéricos, esto merece más +1. Las otras respuestas son más difíciles de invertir la prueba para encontrar los elementos no numéricos. – DrCord
Esto no funciona para números como "0000", "0" (espacio) y "7x" (que se considera un número). –
Supongamos que tenemos columna con entradas de campo que tiene alfanuméricos como
a41q
1458
xwe8
1475
asde
9582
.
.
.
.
.
qe84
y quiere más alto valor numérico de esta columna db (en este caso es 9582), entonces esta consulta lo ayudará
SELECT Max(column_name) from table_name where column_name REGEXP '^[0-9]+$'
* '10000' * es mayor, pero su consulta aún devolverá * '9582' *. –
Esto también funciona:
CAST(coulmn_value AS UNSIGNED) // will return 0 if not numeric string.
por ejemplo
SELECT CAST('a123' AS UNSIGNED) // returns 0
SELECT CAST('123' AS UNSIGNED) // returns 123 i.e. > 0
¿qué pasa con 'SELECT CAST ('12a34' AS UNSIGNED)', que devuelve '12'? –
Esto funciona perfecto si necesita probar elementos no numéricos, esto merece más +1. Las otras respuestas son más difíciles de invertir la prueba para encontrar los elementos no numéricos. – DrCord
@DrCord esto no funciona para el caso que describió Mike C, por lo tanto es muy poco confiable – jontro
Para comprobar si un valor es de tipo int en MySQL, podemos utilizar la siguiente consulta. Esta consulta dará a las filas con valores int
SELECT col1 FROM table WHERE concat('',col * 1) = col;
Esta respuesta funcionó para mí. – Pupil
Esto también seleccionará números no enteros (por ejemplo, * '3.5' *). –
Esto funciona bien para VARCHAR donde comienza con un número o no ..
WHERE concat('',fieldname * 1) != fieldname
pueden tener restricciones cuando se llega a la mayor NNNNE + - números
para mí lo único que funciona es:
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 todos los demás retorno cosas inútiles para mí en caso de 234jk456
o 12 inches
- 1. Determinar si un valor es un número entero en Python
- 2. Pruebe si el valor es un número entero en Sass
- 3. ¿Cómo detectar si un número dado es un número entero?
- 4. ¿Determinar si el valor de JavaScript es un "número entero"?
- 5. ¿Cómo verifico si un valor dado es una lista genérica?
- 6. ¿Cómo comprobar si un valor es un número entero o una cadena en jasmine.js?
- 7. Compruebe si un valor de scanf es un número?
- 8. ¿Cómo verificar si un valor es un número entero con plpgsql?
- 9. Python: prueba si un argumento es un número entero
- 10. cómo comprobar si el carácter es un número entero
- 11. Comprobando si una variable es un número entero en javascript
- 12. Compruebe si el valor es un número
- 13. Java - ¿Cómo comprobar si una división es un número entero o un número flotante?
- 14. ¿Cómo puedo probar si un número de coma flotante es un número entero en haskell?
- 15. Perl, ¿cómo determinar si un valor variable es un número?
- 16. ¿Cómo puedo verificar si un valor es un número?
- 17. Bash: Probando si una variable es un número entero
- 18. número entero Divide y obtener valor entero
- 19. ¿Cómo verifico si un directorio es grabable en PHP?
- 20. Cómo determinar si una cadena es un número en C#
- 21. ¿Cuál es una buena manera de verificar si un doble es un número entero en C#?
- 22. ¿Cómo saco un entero de un NSDictionary y lo pongo en un número entero?
- 23. ¿Cómo verifico si un repositorio está vacío?
- 24. Cómo convertir un número entero en un vector binario?
- 25. ¿Cómo obtener un entero de MySQL como número entero en PHP?
- 26. ¿Cómo verifico si existe un archivo en un control remoto?
- 27. ¿cómo chequea() si la entrada es un número entero o un carácter?
- 28. ¿Cómo saber si un objeto es un número entero o una cadena o isa booleano?
- 29. ¿Cómo puedo saber si un entero Java es nulo?
- 30. Sincronización en un valor entero
tan tristemente debemos crear la función is_int() en MySQL –