介绍
小编给大家分享一下MySQL显式类型转换实例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
定义
在之前的文章中,我们提到过投函数,用于显示进行类型转换。在避免隐式类型转换时,好处多多。其实这里面还有很多细节,是需要梳理下的。本文主要介绍了MySQL显式类型转换的基础知识,通过实例给出了分析结果,一起学习下吧。
首先来看看下面这个转换:
mysql>, SELECT 铸(& # 39;2017 - 12 - 14 - & # 39;,AS 日期); +----------------------------+ |,演员(& # 39;2017 - 12 - 14 - & # 39;,AS 日期),| +----------------------------+ |,2017 - 12 - 14 -,,,,,,,,| +----------------------------+ 1,row set 拷贝;(0.00,sec)
其中:
2017-12-14是待转换的数据。
日期为转换后的类型。
标准语法是这样的:
演员(expr AS 类型)
这里需要注意的是类类型型不支持所有的数据类型,而是支持特定的数据类型,也是今天这篇文章的重点。(我就吃过这个亏,想当然的以为支持所有数据类型,结果就被打脸了)。
不支持的报错:
mysql>, SELECT 铸(& # 39;1024 & # 39;,AS int); ERROR 1064,(42000):,你have an ERROR 拷贝your SQL 语法;,check 从而manual that corresponds 用your MySQL server version for 从而right syntax 用use near & # 39; int) & # 39;, at line 1
支持的类型
下面是投函数支持转换的数据类型列表:
类型 备注 日期 YYYY-MM-DD DATETIME YYYY-MM-DD HH: mm: ss 时间 HH: mm: ss 小数 通常用于带小数位 字符 固定长度字符串 NCHAR 类型于CHAR一致 签署 一个有符号的64整数位 无符号 一个无符号的64整数位 二进制 二进制字符串 JSON MySQL 5.7.8及更高版本注意:
其中日期支持的范围是:1000-01-01至9999-12-31,(实验版本为:)
如果为:999-01-01结果则会0999-01-01。
如果为:01-01-01则会为:2001-01-01。
mysql>, select 铸(& # 39;999 - 11 - 11 & # 39;,as 日期); + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,演员(& # 39;999 - 11 - 11 & # 39;,as 日期),| + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,0999 - 11 - 11,,,,,,,| + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1,row set 拷贝;(0.00,sec)
mysql>, select 铸(& # 39;01-11-11& # 39;,as 日期); + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,演员(& # 39;01-11-11& # 39;,as 日期),| + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,2001 - 11 - 11,,,,,,,| + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1,row set 拷贝;(0.00,sec)
mysql>, select 版本(); + - - - - - - - - - - - - + |,版本()| + - - - - - - - - - - - - + |,5.7.20 | + - - - - - - - - - - - - + 1,row set 拷贝;(0.00,sec)
2. 投函数中expr的值可以转换为类型,其转换的结果才正确,否则转换后的结果默认值,如空,0等。
例如:一个字符类型转换为Demical类型,转换的结果就为0。
mysql>, SELECT 铸(& # 39;ANDYQIAN& # 39;, AS 十进制); + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,演员(& # 39;ANDYQIAN& # 39;, AS 十进制),| + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |,,,,,,,,,,,,,,0 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1,row 集,拷贝,1,warning (0.00, sec)
转换案例
这里给出一些常用的类型转换例子。
日期类型
mysql>, select 铸(& # 39;2017 - 12 - 14 - & # 39;,as 日期); +----------------------------+ |,演员(& # 39;2017 - 12 - 14 - & # 39;,as 日期),| +----------------------------+ |,2017 - 12 - 14 -,,,,,,,,| +----------------------------+ 1,row set 拷贝;(0.00,sec)MySQL显式类型转换实例