談談MySQL顯式類型轉換

本文首發於我的微信公衆號《andyqian》,期待您的關注!

前言

  咱們以前談了《談談MySQL隱式類型轉換》,今天咱們來講說MySQL顯式類型轉換。其實咱們以前有簡單說過一次,此次主要是掰開揉細了說。mysql

CAST 函數

  在以前的文章中,咱們提到過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

  1. 其中DATE支持的範圍是: 1000-01-01 至 9999-12-31,(實驗版本爲:)server

    • 若是爲: 999-01-01 結果則會0999-01-01blog

    • 若是爲: 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索引  

讀懂MySQL執行計劃

談談MySQL隱式類型轉換

 

這裏寫圖片描述

 掃碼關注,一塊兒進步

我的博客: http://www.andyqian.com

相關文章
相關標籤/搜索