Skip to content

MySQL cast 函数

介绍

cast 函数用于转换变量类型。官方文档: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html

as 后面的参数支持 charsignedunsigned datedatetimetimedecimal 等。

支持转换字符集。

convert 函数与 cast 功能类似。

示例

mysql> select cast(1123 as char)
+--------------------+
| cast(1123 as char) |
+--------------------+
| 1123               |
+--------------------+


mysql> select cast("1123" as decimal)
+-------------------------+
| cast("1123" as decimal) |
+-------------------------+
| 1123                    |
+-------------------------+


mysql> select cast("1123" as decimal(10,2))
+-------------------------------+
| cast("1123" as decimal(10,2)) |
+-------------------------------+
| 1123.00                       |
+-------------------------------+

mysql> select cast('123' as signed)
+-----------------------+
| cast('123' as signed) |
+-----------------------+
| 123                   |
+-----------------------+

mysql> select cast('-123' as unsigned)
+--------------------------+
| cast('-123' as unsigned) |
+--------------------------+
| 18446744073709551493     |
+--------------------------+

mysql> select cast('-123.45' as signed)
+---------------------------+
| cast('-123.45' as signed) |
+---------------------------+
| -123                      |
+---------------------------+

字符串转整数示例

mysql> select cast('123' as unsigned);
+-----------------------+
| cast(123 as unsigned) |
+-----------------------+
|                   123 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select cast('123' as signed);
+---------------------+
| cast(123 as signed) |
+---------------------+
|                 123 |
+---------------------+
1 row in set (0.00 sec)


mysql> select cast('12300001111' as signed integer);
+-------------------------------------+
| cast(12300001111 as signed integer) |
+-------------------------------------+
|                         12300001111 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> select cast('123000011112222' as signed integer);
+-----------------------------------------+
| cast(123000011112222 as signed integer) |
+-----------------------------------------+
|                         123000011112222 |
+-----------------------------------------+
1 row in set (0.00 sec)

mysql> select cast('-123000011112222' as signed integer);
+------------------------------------------+
| cast(-123000011112222 as signed integer) |
+------------------------------------------+
|                         -123000011112222 |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> select cast('-123000011112222.123' as signed integer);
+----------------------------------------------+
| cast(-123000011112222.123 as signed integer) |
+----------------------------------------------+
|                             -123000011112222 |
+----------------------------------------------+
1 row in set (0.00 sec)

mysql> select cast('-123000011112222.823' as signed integer);
+----------------------------------------------+
| cast(-123000011112222.823 as signed integer) |
+----------------------------------------------+
|                             -123000011112223 |
+----------------------------------------------+
1 row in set (0.00 sec)

字符串转double示例

mysql> select cast('-123002222.823' as double);
+----------------------------------+
| cast('-123002222.823' as double) |
+----------------------------------+
|                   -123002222.823 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select cast('-123000011112222.823' as double);
+----------------------------------------+
| cast('-123000011112222.823' as double) |
+----------------------------------------+
|                    -123000011112222.83 |
+----------------------------------------+
1 row in set (0.00 sec)

字符串转decimal示例

mysql> select cast('-123002222.823' as decimal);
+-----------------------------------+
| cast('-123002222.823' as decimal) |
+-----------------------------------+
|                        -123002223 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select cast('-123002222.823' as decimal(10, 2));
+------------------------------------------+
| cast('-123002222.823' as decimal(10, 2)) |
+------------------------------------------+
|                             -99999999.99 |    -- 这个结果有问题
+------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select cast('-123002222.823' as decimal(20, 2));
+------------------------------------------+
| cast('-123002222.823' as decimal(20, 2)) |
+------------------------------------------+
|                            -123002222.82 |
+------------------------------------------+
1 row in set, 1 warning (0.00 sec)