咱們以前談了《談談MySQL隱式類型轉換》,今天咱們來講說MySQL顯式類型轉換。其實咱們以前有簡單說過一次,此次主要是掰開揉細了說。mysql
在以前的文章中,咱們提到過CAST函數,用於顯示進行類型轉換。在避免隱式類型轉換時,好處多多。其實這裏面還有不少細節,是須要梳理下的。
首先來看看下面這個轉換:sql
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類型不支持全部的數據類型,而是支持特定的數據類型,也是今天這篇文章的重點。(我就吃過這個虧,想固然的覺得支持全部數據類型,結果就被打臉了) 。spa
不支持的報錯:.net
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函數支持轉換的數據類型列表:3d
類型 | 備註 |
---|---|
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 及更高版本 |
注意:code
其中DATE支持的範圍是: 1000-01-01
至 9999-12-31
,(實驗版本爲:)server
若是爲: 999-01-01
結果則會0999-01-01
。blog
若是爲: 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等。
例如:一個Char類型轉換爲Demical類型,轉換的結果就爲0。
mysql> SELECT CAST('ANDYQIAN' AS DECIMAL); +-----------------------------+ | CAST('ANDYQIAN' AS DECIMAL) | +-----------------------------+ | 0 | +-----------------------------+ 1 row in set, 1 warning (0.00 sec)
這裏給出一些經常使用的類型轉換例子。
DATE 類型
mysql> select cast('2017-12-14' as DATE); +----------------------------+ | cast('2017-12-14' as DATE) | +----------------------------+ | 2017-12-14 | +----------------------------+ 1 row in set (0.00 sec)
TIME 類型
mysql> select cast('12:00:00' as TIME); +--------------------------+ | cast('12:00:00' as TIME) | +--------------------------+ | 12:00:00 | +--------------------------+ 1 row in set (0.00 sec)
DATETIM 類型
mysql> select cast('2017-12-14 00:11:11' as DATETIME); +-----------------------------------------+ | cast('2017-12-14 00:11:11' as DATETIME) | +-----------------------------------------+ | 2017-12-14 00:11:11 | +-----------------------------------------+ 1 row in set (0.00 sec)
SIGNED類型
mysql> select cast('-1024' as SIGNED); +-------------------------+ | cast('-1024' as SIGNED) | +-------------------------+ | -1024 | +-------------------------+ 1 row in set (0.00 sec)
UNSIGNED類型
mysql> select cast('-1024' as UNSIGNED); +---------------------------+ | cast('-1024' as UNSIGNED) | +---------------------------+ | 18446744073709550592 | +---------------------------+ 1 row in set, 1 warning (0.00 sec)
DECIMAL類型
mysql> select cast('18.11' as DECIMAL(18,2)); +--------------------------------+ | cast('18.11' as DECIMAL(18,2)) | +--------------------------------+ | 18.11 | +--------------------------------+ 1 row in set (0.00 sec)
上面這些命令,有興趣的童鞋,能夠在本身電腦上敲敲!
最近在看劉若英的《我敢在你懷裏孤獨》,其中就說到了獨處,她時常會給本身創造獨處的機會。仔細想一想,我也有這樣的經歷。在公司時,我時常帶上耳機聽音樂,聽音樂並非爲了欣賞惟美的旋律或動人的歌詞,而是在給本身創造獨處的機會。讓本身"獨處"起來。日常也是常常在深夜活躍,其中大部分文章就是在深夜寫的。深夜格外安靜,安靜的都能聽到本身的呼吸聲。在這樣的環境中,敲擊着鍵盤,聽着音樂,感受整個世界都是個人。
相關閱讀:
掃碼關注,一塊兒進步
我的博客: http://www.andyqian.com