MySQL顯式分類轉(zhuǎn)換案例分享
發(fā)表時間:2023-07-21 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在之前的文章中,我們提到過CAST函數(shù),用于顯示進行類型轉(zhuǎn)換。在避免隱式類型轉(zhuǎn)換時,好處多多。其實這里面還有很多細(xì)節(jié),是需要梳理下的。本文主要介紹了MySQL顯式類型轉(zhuǎn)換的基礎(chǔ)知識,通過實例給出了分...
在之前的文章中,我們提到過CAST函數(shù),用于顯示進行類型轉(zhuǎn)換。在避免隱式類型轉(zhuǎn)換時,好處多多。其實這里面還有很多細(xì)節(jié),是需要梳理下的。本文主要介紹了MySQL顯式類型轉(zhuǎn)換的基礎(chǔ)知識,通過實例給出了分析結(jié)果,一起學(xué)習(xí)下吧。
首先來看看下面這個轉(zhuǎn)換:
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 是待轉(zhuǎn)換的數(shù)據(jù)。
DATE為轉(zhuǎn)換后的類型。
標(biāo)準(zhǔn)語法是這樣的:
CAST(expr AS type)
這里需要注意的是type類型不支持所有的數(shù)據(jù)類型,而是支持特定的數(shù)據(jù)類型,也是今天這篇文章的重點。(我就吃過這個虧,想當(dāng)然的以為支持所有數(shù)據(jù)類型,結(jié)果就被打臉了) 。
不支持的報錯:
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函數(shù)支持轉(zhuǎn)換的數(shù)據(jù)類型列表:
類型 |
備注 |
---|
DATE |
YYYY-MM-DD |
DATETIME |
YYYY-MM-DD HH:mm:ss |
TIME |
HH:mm:ss |
DECIMAL |
通常用于帶小數(shù)位 |
CHAR |
固定長度字符串 |
NCHAR |
類型于CHAR一致 |
SIGNED |
一個有符號的64整數(shù)位 |
UNSIGNED |
一個無符號的64整數(shù)位 |
BINARY |
二進制字符串 |
JSON |
MySQL 5.7.8 及更高版本 |
注意:
其中DATE支持的范圍是: 1000-01-01 至 9999-12-31,(實驗版本為:)
如果為: 999-01-01 結(jié)果則會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函數(shù)中expr的值可以轉(zhuǎn)換為type,其轉(zhuǎn)換的結(jié)果才正確,否則轉(zhuǎn)換后的結(jié)果默認(rèn)值,如Null,0等。
例如:一個Char類型轉(zhuǎn)換為Demical類型,轉(zhuǎn)換的結(jié)果就為0。
mysql> SELECT CAST('ANDYQIAN' AS DECIMAL);
+-----------------------------+
CAST('ANDYQIAN' AS DECIMAL)
+-----------------------------+
0
+-----------------------------+
1 row in set, 1 warning (0.00 sec)
轉(zhuǎn)換案例
這里給出一些常用的類型轉(zhuǎn)換例子。
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)
相關(guān)推薦:
MySQL升級的最佳方法實例分享
詳解php封裝Mysql操作類
PHP如何解決MySQL存儲數(shù)據(jù)中文亂碼
以上就是MySQL顯式類型轉(zhuǎn)換實例分享的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。