在先前的文章中,我們提到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明確型別轉換實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!