MySQL顯式類型轉換實例分享

在之前的文章中,我們提到過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升級的最佳方法實例分享

MySQL升級的最佳方法實例分享

MySQL升級的最佳方法實例分享

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享