咱们以前谈了《谈谈MySQL隐式类型转换》,今天咱们来讲说MySQL显式类型转换。其实咱们以前有简单说过一次,此次主要是掰开揉细了说。mysql
在以前的文章中,咱们提到过CAST函数,用于显示进行类型转换。在避免隐式类型转换时,好处多多。其实这里面还有不少细节,是须要梳理下的。
首先来看看下面这个转换:sql
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类型不支持全部的数据类型,而是支持特定的数据类型,也是今天这篇文章的重点。(我就吃过这个亏,想固然的觉得支持全部数据类型,结果就被打脸了) 。spa
不支持的报错:.net
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函数支持转换的数据类型列表:3d
类型 | 备注 |
---|---|
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 及更高版本 |
注意:code
其中DATE支持的范围是: 1000-01-01
至 9999-12-31
,(实验版本为:)server
若是为: 999-01-01
结果则会0999-01-01
。blog
若是为: 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)
上面这些命令,有兴趣的童鞋,能够在本身电脑上敲敲!
最近在看刘若英的《我敢在你怀里孤独》,其中就说到了独处,她时常会给本身创造独处的机会。仔细想一想,我也有这样的经历。在公司时,我时常带上耳机听音乐,听音乐并非为了欣赏惟美的旋律或动人的歌词,而是在给本身创造独处的机会。让本身"独处"起来。日常也是常常在深夜活跃,其中大部分文章就是在深夜写的。深夜格外安静,安静的都能听到本身的呼吸声。在这样的环境中,敲击着键盘,听着音乐,感受整个世界都是个人。
相关阅读:
扫码关注,一块儿进步
我的博客: http://www.andyqian.com