• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    浅析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 及更高版本

    注意:

    其中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隐式类型的转换陷阱和规则
    • MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)
    • 使用python将mysql数据库的数据转换为json数据的方法
    • MySQL常用类型转换函数总结(推荐)
    • MySQL日期函数与日期转换格式化函数大全
    • mysql 转换NULL数据方法(必看)
    • 谈谈MySQL中的隐式转换
    上一篇:EF(EntityFramework) 插入或更新数据报错的解决方法
    下一篇:实战MySQL升级的最佳方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    浅析MySQL显式类型转换 浅析,MySQL,显式,类型,转换,