Estoy tratando de hacer esto:
SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...
He visto las preguntas frecuentes de ayuda aquí: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html , dice que puedo hacerlo como CAST(val AS TYPE)
, pero no funciona.
Tratando de convertir un decimal a int, el valor real es 223.00 y quiero 223
Respuestas:
Podría probar la función FLOOR de esta manera:
SELECT FLOOR(columnName), moreColumns, etc FROM myTable WHERE ...
También puede probar la función FORMAT , siempre que sepa que se pueden omitir los lugares decimales:
SELECT FORMAT(columnName,0), moreColumns, etc FROM myTable WHERE ...
Puedes combinar las dos funciones
SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc FROM myTable WHERE ...
fuente
Una forma más optimizada de mysql para este propósito*:
SELECT columnName DIV 1 AS columnName, moreColumns, etc FROM myTable WHERE ...
El uso de DIV 1 es una gran mejora de velocidad con respecto a FLOOR , sin mencionar las funciones basadas en cadenas como FORMAT
mysql> SELECT BENCHMARK(10000000,1234567 DIV 7) ; +-----------------------------------+ | BENCHMARK(10000000,1234567 DIV 7) | +-----------------------------------+ | 0 | +-----------------------------------+ 1 row in set (0.83 sec) mysql> SELECT BENCHMARK(10000000,1234567 / 7) ; +---------------------------------+ | BENCHMARK(10000000,1234567 / 7) | +---------------------------------+ | 0 | +---------------------------------+ 1 row in set (7.26 sec) mysql> SELECT BENCHMARK(10000000,FLOOR(1234567 / 7)) ; +----------------------------------------+ | BENCHMARK(10000000,FLOOR(1234567 / 7)) | +----------------------------------------+ | 0 | +----------------------------------------+ 1 row in set (8.80 sec)
(*) NOTA: Como señaló Grbts, tenga en cuenta el comportamiento de DIV 1 cuando se usa con valores no sin signo / positivos.
fuente
Del artículo al que vinculó:
Prueba en
SIGNED
lugar deINT
fuente
utilizar esta
mysql> SELECT TRUNCATE(223.69, 0); > 223
Aquí hay un enlace
fuente
Existe una diferencia importante entre floor () y DIV 1. Para números negativos, se comportan de manera diferente. DIV 1 devuelve la parte entera (como lo hace la conversión con signo), mientras que floor (x) devuelve "el valor entero más grande no mayor que x" (del manual). Entonces: seleccionar piso (-1.1) da como resultado -2, mientras que seleccionar -1.1 div 1 da como resultado -1
fuente
La función CAST () no admite el tipo de datos "oficial" "INT" en MySQL, no está en la lista de tipos admitidos . Con MySQL, "FIRMADO" (o "NO FIRMADO") podría usarse en su lugar:
Sin embargo, esto parece ser específico de MySQL (no estandarizado), por lo que es posible que no funcione con otras bases de datos. Al menos este documento (Segundo Borrador de Revisión Informal) ISO / IEC 9075: 1992, Base de Datos no incluye "FIRMADO" / "SIN FIRMAR" en la sección
4.4 Numbers
.Pero DECIMAL está estandarizado y es compatible con MySQL, por lo que lo siguiente debería funcionar para MySQL (probado) y otras bases de datos:
Según los documentos de MySQL :
fuente
También hay ROUND () si sus números no siempre terminan necesariamente en .00. RONDA (20.6) dará 21 y RONDA (20.4) dará 20.
fuente
puedes probar esto:
SELECT columnName1, CAST(columnName2 AS SIGNED ) FROM tableName
fuente
Tratar
cast (columnName as unsigned)
unsigned es solo valor positivo
Si desea incluir un valor negativo, entonces
cast (columnName as signed)
,la diferencia entre el signo (inclusión negativa) y sin signo (el doble del tamaño del signo, pero no negativo)
fuente
1 centavo: sin espacio b / w CAST y (expresión). es decir, CAST (columnName AS FIRMADO).
fuente