数据库教程:浅析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函数支持转换的数据类型列表:

类型 备注 DATE YYYY-MM-DD DATETIME YYYY-MM-DDHH:mm:ss TIME HH:mm:ss DECIMAL 通常用于带小数位 CHAR 固定长度字符串 NCHAR 类型于CHAR一致 SIGNED 一个有符号的64整数位 UNSIGNED 一个无符号的64整数位 BINARY 二进制字符串 JSON MySQL5.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显式类型转换分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/914711.html

(0)
上一篇 2021年10月29日
下一篇 2021年10月29日

精彩推荐