2012-04-27 25 views
6

¿Por qué un molde anidado NO funciona en MySQL? (No usar SQL Server)CAST anidado no funciona

select cast(cast(myColumn as decimal(5,2)) as int) from myTable 

SQLFiddle Example

+0

¿Qué estás tratando de lograr? ¿Cuál es el propósito de transmitir como 'UNSIGNED', solo para interpretar los datos resultantes como un 'INT' firmado? ¿No tendrá esto el mismo efecto que hacer directamente 'CAST (myColumn AS INT)'? – eggyal

+0

@eggyal: Cambié mi ejemplo.La pregunta surgió tratando de encontrar números enteros en un campo varchar e ignorando los números decimales como ese: 'select * from tab donde fundido (cast (myColumn como decimal (5,2)) como int) = cast (myColumn como decimal (5,2)) ' –

+0

Para lograr eso, probablemente le resulte más fácil probar sus columnas contra [expresiones regulares] (http://dev.mysql.com/doc/refman/5.1/en/regexp.html) . Consulte [esta pregunta] (http://stackoverflow.com/questions/75704/how-do-i-check-to-see-if-a-value-is-an-integer-in-mysql) para obtener más información. – eggyal

Respuesta

3

Según the manual:

CAST(expr AS type) [...]

CONVERT(expr,type) [...]

El type puede ser uno de los siguientes valores:

  • BINARY[(N)]

  • CHAR[(N)]

  • DATE

  • DATETIME

  • DECIMAL[(M[,D])]

  • SIGNED [INTEGER]

  • TIME

  • UNSIGNED [INTEGER]

Así, sólo tienes que seguir el manual:

SELECT CAST(CAST(myColumn AS DECIMAL(5,2)) AS SIGNED) FROM myTable 

o

SELECT CAST(CAST(myColumn AS DECIMAL(5,2)) AS UNSIGNED) FROM myTable 
0

Esta consulta está trabajando en el concepto de reparto anidada.

fundido (suma (molde (Column_name int) + fundido (Column_name como int)) como BIGINT) como pago de nombre_tabla

Cuestiones relacionadas