我在SQL中遇到这些语句,我不明白使用 CAST 函数输出的是什么?
这些是陈述:
cast(date_var - 19000000 as DATE) + 1 as integer
这会输出date_var的第二天吗?
cast(substr('date_var',1,6) || '01' as integer) - 10000
我对这个输出会更加困惑吗?
答案 0 :(得分:4)
CAST或CONVERT将显式值从一种数据类型转换为另一种数据类型。
SQL语法1:
CONVERT( datatype, expression [, style] )
SQL语法2:
CAST( expression AS datatype )
参数: 表达 任何类型的任何表达。 数据类型
新数据类型。此参数不是表达式。
式
与MS SQL Server兼容的整数值。
转义语法:
{fn CONVERT( expression, datatype )}
返回类型: 使用参数datatype确定。 例子:
SELECT convert( varchar(30), price )
SELECT convert( nvarchar(30), now(), 102)
SELECT {fn convert( {fn now()}, nvarchar(30))}
SELECT cast( price as varchar(30)
答案 1 :(得分:2)
CAST()
函数将任何类型的值转换为具有指定类型的值。
目标类型可以是以下任何一种类型: BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED 。
语法: - CAST(expr AS type)
例如:-1
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2017-02-06 10:49:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT CAST(NOW() as DATE);
+---------------------+
| CAST(NOW() as DATE) |
+---------------------+
| 2017-02-06 |
+---------------------+
1 row in set (0.00 sec)
例如:-2
mysql> SELECT CAST(-1 as signed);
+--------------------+
| CAST(-1 as signed) |
+--------------------+
| -1 |
+--------------------+
1 row in set (0.00 sec)
mysql> SELECT CAST(-1 as unsigned);
+----------------------+
| CAST(-1 as unsigned) |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)