2012-04-27 139 views
6

爲什麼嵌套轉換不能在MySQL中工作? (它使用SQL Server)嵌套CAST不起作用

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

SQLFiddle Example

+0

什麼是你試圖完成付款?作爲'UNSIGNED'投射的目的是什麼?只有這樣才能將結果數據解釋爲有符號的「INT」?這不會和直接做CAST(myColumn AS INT)'有相同的效果嗎? – eggyal 2012-04-27 09:05:10

+0

@eggyal:我改變了我的例子。問題出現了,試圖在varchar字段中查找整數並忽略這樣的小數:'select * from tab where cast(cast(myColumn as decimal(5,2))as int)= cast(myColumn as decimal( 5,2))' – 2012-04-27 09:09:55

+0

爲了達到這個目的,你可能會發現使用[正則表達式]來測試列更容易(http://dev.mysql.com/doc/refman/5.1/en/regexp.html) 。看到[這個問題](http://stackoverflow.com/questions/75704/how-do-i-check-to-see-if-a-value-is-an-integer-in-mysql)瞭解更多信息。 – eggyal 2012-04-27 09:10:51

回答

3

根據the manual

CAST(expr AS type) [...]

CONVERT(expr,type) [...]

type可以是以下值之一:

  • BINARY[(N)]

  • CHAR[(N)]

  • DATE

  • DATETIME

  • DECIMAL[(M[,D])]

  • SIGNED [INTEGER]

  • TIME

  • UNSIGNED [INTEGER]

所以,只要按照手冊:

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

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

此查詢正在嵌套投的概念。

投(總和(CAST(列INT)+投(列如INT))爲BIGINT)從table_name的