谈谈MySQL显式类型转换


声明:本文转载自https://my.oschina.net/u/1462914/blog/1589685,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

本文首发于个人微信公众号《andyqian》,期待您的关注!

前言

  我们之前谈了《谈谈MySQL隐式类型转换》,今天我们来说说MySQL显式类型转换。其实我们之前有简单说过一次,这次主要是掰开揉细了说。

CAST 函数

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

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 及更高版本

注意:

  1. 其中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索引  

读懂MySQL执行计划

谈谈MySQL隐式类型转换

 

这里写图片描述

 扫码关注,一起进步

个人博客: http://www.andyqian.com

本文发表于2017年12月14日 14:34
(c)注:本文转载自https://my.oschina.net/u/1462914/blog/1589685,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1817 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1