小编给大家分享一下MySQL显式类型转换的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

CAST 函数

在之前的文章中,我们提到过CAST函数,用于显示进行类型转换。在避免隐式类型转换时,好处多多。其实这里面还有很多细节,是需要梳理下的。

首先来看看下面这个转换:

mysql>SELECTCAST('2017-12-14'ASDATE);+----------------------------+|CAST('2017-12-14'ASDATE)|+----------------------------+|2017-12-14|+----------------------------+1rowinset(0.00sec)

其中:

2017-12-14 是待转换的数据。

DATE为转换后的类型。

标准语法是这样的:

CAST(exprAStype)

这里需要注意的是type类型不支持所有的数据类型,而是支持特定的数据类型,也是今天这篇文章的重点。(我就吃过这个亏,想当然的以为支持所有数据类型,结果就被打脸了) 。

不支持的报错:

mysql>SELECTCAST('1024'ASint);ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'int)'atline1

支持的类型

下面是CAST函数支持转换的数据类型列表:

类型备注DATEYYYY-MM-DDDATETIMEYYYY-MM-DD HH:mm:ssTIMEHH:mm:ssDECIMAL通常用于带小数位CHAR固定长度字符串NCHAR类型于CHAR一致SIGNED一个有符号的64整数位UNSIGNED一个无符号的64整数位BINARY二进制字符串JSONMySQL 5.7.8 及更高版本

注意:

其中DATE支持的范围是: 1000-01-01 至 9999-12-31,(实验版本为:)

如果为: 999-01-01 结果则会0999-01-01。

如果为: 01-01-01则会为:2001-01-01。

mysql>selectcast('999-11-11'asDATE);+---------------------------+|cast('999-11-11'asDATE)|+---------------------------+|0999-11-11|+---------------------------+1rowinset(0.00sec)

mysql>selectcast('01-11-11'asDATE);+--------------------------+|cast('01-11-11'asDATE)|+--------------------------+|2001-11-11|+--------------------------+1rowinset(0.00sec)

mysql>selectversion();+-----------+|version()|+-----------+|5.7.20|+-----------+1rowinset(0.00sec)

2. CAST函数中expr的值可以转换为type,其转换的结果才正确,否则转换后的结果默认值,如Null,0等。

例如:一个Char类型转换为Demical类型,转换的结果就为0。

mysql>SELECTCAST('ANDYQIAN'ASDECIMAL);+-----------------------------+|CAST('ANDYQIAN'ASDECIMAL)|+-----------------------------+|0|+-----------------------------+1rowinset,1warning(0.00sec)

转换案例

这里给出一些常用的类型转换例子。

DATE 类型

mysql>selectcast('2017-12-14'asDATE);+----------------------------+|cast('2017-12-14'asDATE)|+----------------------------+|2017-12-14|+----------------------------+1rowinset(0.00sec)

TIME 类型

mysql>selectcast('12:00:00'asTIME);+--------------------------+|cast('12:00:00'asTIME)|+--------------------------+|12:00:00|+--------------------------+1rowinset(0.00sec)

DATETIM 类型

mysql>selectcast('2017-12-1400:11:11'asDATETIME);+-----------------------------------------+|cast('2017-12-1400:11:11'asDATETIME)|+-----------------------------------------+|2017-12-1400:11:11|+-----------------------------------------+1rowinset(0.00sec)

SIGNED类型

mysql>selectcast('-1024'asSIGNED);+-------------------------+|cast('-1024'asSIGNED)|+-------------------------+|-1024|+-------------------------+1rowinset(0.00sec)

UNSIGNED类型

mysql>selectcast('-1024'asUNSIGNED);+---------------------------+|cast('-1024'asUNSIGNED)|+---------------------------+|18446744073709550592|+---------------------------+1rowinset,1warning(0.00sec)

DECIMAL类型

mysql>selectcast('18.11'asDECIMAL(18,2));+--------------------------------+|cast('18.11'asDECIMAL(18,2))|+--------------------------------+|18.11|+--------------------------------+1rowinset(0.00sec)

以上是“MySQL显式类型转换的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!