本文摘自PHP中文网,作者小云云,侵删。
在之前的文章中,我们提到过CAST函数,用于显示进行类型转换。在避免隐式类型转换时,好处多多。其实这里面还有很多细节,是需要梳理下的。本文主要介绍了MySQL显式类型转换的基础知识,通过实例给出了分析结果,一起学习下吧。
首先来看看下面这个转换:
1
2
3
4
5
6
7
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为转换后的类型。
标准语法是这样的:
这里需要注意的是type类型不支持所有的数据类型,而是支持特定的数据类型,也是今天这篇文章的重点。(我就吃过这个亏,想当然的以为支持所有数据类型,结果就被打脸了) 。
不支持的报错:
1
2
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。
1
2
3
4
5
6
7
mysql> select cast(
'999-11-11'
as
DATE
);
+---------------------------+
| cast(
'999-11-11'
as
DATE
) |
+---------------------------+
| 0999-11-11 |
+---------------------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
mysql> select cast(
'01-11-11'
as
DATE
);
+--------------------------+
| cast(
'01-11-11'
as
DATE
) |
+--------------------------+
| 2001-11-11 |
+--------------------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.20 |
+-----------+
1 row in set (0.00 sec)
2. CAST函数中expr的值可以转换为type,其转换的结果才正确,否则转换后的结果默认值,如Null,0等。
例如:一个Char类型转换为Demical类型,转换的结果就为0。
1
2
3
4
5
6
7
mysql> SELECT CAST(
'ANDYQIAN'
AS DECIMAL);
+-----------------------------+
| CAST(
'ANDYQIAN'
AS DECIMAL) |
+-----------------------------+
| 0 |
+-----------------------------+
1 row in set, 1 warning (0.00 sec)
转换案例
这里给出一些常用的类型转换例子。
DATE 类型
1
2
3
4
5
6
7
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 类型
1
2
3
4
5
6
7
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 类型
1
2
3
4
5
6
7
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类型
1
2
3
4
5
6
7
mysql> select cast(
'-1024'
as
SIGNED);
+-------------------------+
| cast(
'-1024'
as
SIGNED) |
+-------------------------+
| -1024 |
+-------------------------+
1 row in set (0.00 sec)
UNSIGNED类型
1
2
3
4
5
6
7
mysql> select cast(
'-1024'
as
UNSIGNED);
+---------------------------+
| cast(
'-1024'
as
UNSIGNED) |
+---------------------------+
| 18446744073709550592 |
+---------------------------+
1 row in set, 1 warning (0.00 sec)
DECIMAL类型
1
2
3
4
5
6
7
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显式类型转换实例分享 的详细内容,更多文章请关注木庄网络博客 !!
相关阅读 >>
mysql 如何查看是否自动提交
mysql 连接不了服务器怎么办
mysql 分页性能探索
mysql 外键使用详解
phpmyadmin无法连接mysql 服务器
mysql 数据库难学吗?
mysql 数据库查询缓存原理是什么
mysql 索引提高查询效率的原因何在
navicat for mysql 是什么
mysql 5.7并发复制隐式bug实例分析
更多相关阅读请进入《mysql 》频道 >>
¥41.1元 机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL显式类型转换实例分享