明辉站/应用软件/内容

MySQL显式分类转换案例分享

应用软件2023-07-13 阅读
[摘要]在之前的文章中,我们提到过CAST函数,用于显示进行类型转换。在避免隐式类型转换时,好处多多。其实这里面还有很多细节,是需要梳理下的。本文主要介绍了MySQL显式类型转换的基础知识,通过实例给出了分析结果,一起学习下吧。首先来看看下面这个转换:mysql> SELECT CAST(2017-...

在之前的文章中,我们提到过CAST函数,用于显示进行类型转换。在避免隐式类型转换时,好处多多。其实这里面还有很多细节,是需要梳理下的。本文主要介绍了MySQL显式类型转换的基础知识,通过实例给出了分析结果,一起学习下吧。

首先来看看下面这个转换:

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升级的最佳方法实例分享

详解php封装Mysql操作类

PHP如何解决MySQL存储数据中文乱码

以上就是MySQL显式类型转换实例分享的详细内容,更多请关注php中文网其它相关文章!


学习教程快速掌握从入门到精通的SQL知识。

……

相关阅读