2012-04-27 8 views
6

Perché un cast nidificato NON funziona in MySQL? (Lo fa utilizzando SQL Server)Nested CAST non funziona

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

SQLFiddle Example

+0

Cosa stai cercando di realizzare? Qual è lo scopo del casting come 'UNSIGNED', solo allora per interpretare i dati risultanti come un' INT' firmato? Questo non ha lo stesso effetto di fare direttamente 'CAST (myColumn AS INT)'? – eggyal

+0

@eggyal: Ho cambiato il mio esempio.La domanda è venuta cercando di trovare numeri interi in un campo varchar e ignorando i numeri decimali come quello: 'select * dalla scheda where cast (cast (myColumn as decimal (5,2)) as int) = cast (myColumn come decimale (5,2)) ' –

+0

Per riuscirci, probabilmente troverai più facile testare le tue colonne contro [espressioni regolari] (http://dev.mysql.com/doc/refman/5.1/en/regexp.html) . Vedi [questa domanda] (http://stackoverflow.com/questions/75704/how-do-i-check-to-see-if-a-value-is-an-integer-in-mysql) per maggiori informazioni. – eggyal

risposta

3

Secondo the manual:

CAST(expr AS type) [...]

CONVERT(expr,type) [...]

Il type può essere uno dei seguenti valori:

  • BINARY[(N)]

  • CHAR[(N)]

  • DATE

  • DATETIME

  • DECIMAL[(M[,D])]

  • SIGNED [INTEGER]

  • TIME

  • UNSIGNED [INTEGER]

Quindi, basta seguire il manuale:

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

Questa query sta lavorando sul concetto del cast nidificato.

cast (sum (cast (Column_name int) + cast (Column_name come int)) come bigint) in pagamento dal table_name