首頁  >  文章  >  資料庫  >  MySQL明確型別轉換實例分享

MySQL明確型別轉換實例分享

小云云
小云云原創
2018-01-05 16:36:271535瀏覽

在先前的文章中,我們提到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封裝Mysql操作類

PHP如何解決MySQL儲存資料中文亂碼

#

以上是MySQL明確型別轉換實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn