您好,登錄后才能下訂單哦!
小編給大家分享一下MySQL顯式類型轉換實例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
undefined
在之前的文章中,我們提到過CAST函數,用于顯示進行類型轉換。在避免隱式類型轉換時,好處多多。其實這里面還有很多細節,是需要梳理下的。本文主要介紹了MySQL顯式類型轉換的基礎知識,通過實例給出了分析結果,一起學習下吧。
首先來看看下面這個轉換:
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等。
例如:一個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)
以上是“MySQL顯式類型轉換實例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。