明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

MySQL顯式分類轉(zhuǎ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知識。