CAST 函數
在之前的文章中,我們提到過CAST函數,用于顯示進行類型轉換。在避免隱式類型轉換時,好處多多。其實這里面還有很多細節,是需要梳理下的。
首先來看看下面這個轉換:
| mysql> SELECT CAST('2017-12-14' AS DATE);+----------------------------+| CAST('2017-12-14' AS DATE) |+----------------------------+| 2017-12-14 |+----------------------------+1 row in set (0.00 sec) |
其中:
2017-12-14 是待轉換的數據。
DATE為轉換后的類型。
標準語法是這樣的:
| CAST(expr AS type) |
這里需要注意的是type類型不支持所有的數據類型,而是支持特定的數據類型,也是今天這篇文章的重點。(我就吃過這個虧,想當然的以為支持所有數據類型,結果就被打臉了) 。
不支持的報錯:
| mysql> SELECT CAST('1024' AS int);ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int)' at line 1 |
支持的類型
下面是CAST函數支持轉換的數據類型列表:
| 類型 | 備注 |
|---|---|
| DATE | YYYY-MM-DD |
| DATETIME | YYYY-MM-DD HH:mm:ss |
| TIME | HH:mm:ss |
| DECIMAL | 通常用于帶小數位 |
| CHAR | 固定長度字符串 |
| NCHAR | 類型于CHAR一致 |
| SIGNED | 一個有符號的64整數位 |
| UNSIGNED | 一個無符號的64整數位 |
| BINARY | 二進制字符串 |
| JSON | MySQL 5.7.8 及更高版本 |
注意:
其中DATE支持的范圍是: 1000-01-01 至 9999-12-31,(實驗版本為:)
如果為: 999-01-01 結果則會0999-01-01。
如果為: 01-01-01則會為:2001-01-01。
| mysql> select cast('999-11-11' as DATE);+---------------------------+| cast('999-11-11' as DATE) |+---------------------------+| 0999-11-11 |+---------------------------+1 row in set (0.00 sec) |
| mysql> select cast('01-11-11' as DATE);+--------------------------+| cast('01-11-11' as DATE) |+--------------------------+| 2001-11-11 |+--------------------------+1 row in set (0.00 sec) |
| mysql> select version();+-----------+| version() |+-----------+| 5.7.20 |+-----------+1 row in set (0.00 sec) |
2. CAST函數中expr的值可以轉換為type,其轉換的結果才正確,否則轉換后的結果默認值,如Null,0等。
新聞熱點
疑難解答