将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。
CAST 语法:
CAST (expression AS data_type [ (length ) ] )
CONVERT 语法:
CONVERT (data_type [ (length ) ] ,expression [ ,style ] )
参数
- expression
-
任何有效的表达式。
- data_type
-
目标数据类型。这包括 xml、bigint 和 sql_variant。不能使用别名数据类型。有关可用数据类型的详细信息,请参阅数据类型 (Transact-SQL)。
- length
-
指定目标数据类型长度的可选整数。默认值为 30。
- style
-
指定 CONVERT 函数如何转换 expression 的整数表达式。如果样式为 NULL,则返回 NULL。该范围是由 data_type 确定的。有关详细信息,请参阅“备注”部分。
返回类型
返回转换为 data_type 的 expression。
Date 和 Time 样式
如果 expression 为 date 或 time 数据类型,则 style 可以为下表中显示的值之一。其他值作为 0 进行处理。SQL Server 使用科威特算法来支持阿拉伯样式的日期格式。
——————————————————————————————————————————————————————————————————————————————————
不带世纪数位 (yy) |
带世纪数位 (yyyy) | 标准 | 输入/输出 (3) |
0 或 100 (1,2) | 默认 |
mon dd yyyy hh:miAM(或 PM) |
|
1 | 101 | 美国 |
mm/dd/yyyy |
2 | 102 | ANSI |
yy.mm.dd |
3 | 103 | 英国/法国 |
dd/mm/yyyy |
4 | 104 | 德国 |
dd.mm.yy |
5 | 105 | 意大利 |
dd-mm-yy |
6 | 106 (1) |
dd mon yy |
|
7 | 107 (1) |
mon dd, yy |
|
8 | 108 |
hh:mi:ss |
|
9 或 109 (1,2) | 默认设置 + 毫秒 |
mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
|
10 | 110 | 美国 |
mm-dd-yy |
11 | 111 | 日本 |
yy/mm/dd |
12 | 112 | ISO |
yymmdd yyyymmdd |
13 或 113 (1,2) | 欧洲默认设置 + 毫秒 |
dd mon yyyy hh:mi:ss:mmm(24h) |
|
14 | 114 |
hh:mi:ss:mmm(24h) |
|
20 或 120 (2) | ODBC 规范 |
yyyy-mm-dd hh:mi:ss(24h) |
|
21 或 121 (2) | ODBC 规范(带毫秒) |
yyyy-mm-dd hh:mi:ss.mmm(24h) |
|
126 (4) | ISO8601 |
yyyy-mm-ddThh:mi:ss.mmm(无空格) |
|
127(6, 7) | 带时区 Z 的 ISO8601。 |
yyyy-mm-ddThh:mi:ss.mmmZ(无空格) |
|
130 (1,2) | 回历 (5) |
dd mon yyyy hh:mi:ss:mmmAM |
|
131 (2) | 回历 (5) | dd/mm/yy hh:mi:ss:mmmAM |
——————————————————————————————————————————————————————————————————————————————————
1 这些样式值将返回不确定的结果。包括所有 (yy)(不带世纪数位)样式和一部分 (yyyy)(带世纪数位)样式。
2 默认值(style0 或 100、9 或 109、13 或 113、20 或 120 以及 21 或 121)始终返回世纪数位 (yyyy)。
3 转换为 datetime 时输入;转换为字符数据时输出。
4 为用于 XML 而设计。对于从 datetime 或 smalldatetime 到字符数据的转换,其输出格式如上一个表所述。
5 回历是有多种变体的日历系统。SQL Server 使用科威特算法。
-- 默认
-- mm dd yyyy hh:mmPM/AM
SELECT CONVERT(varchar(100),GETDATE());
SELECT CONVERT(varchar(100),GETDATE(),0);
SELECT CONVERT(varchar(100),GETDATE(),100);
--
-- 美国
-- mm/dd/yy
SELECT CONVERT(varchar(100),GETDATE(),1);
-- mm/dd/yyyy
SELECT CONVERT(varchar(100),GETDATE(),101);
--
-- ANSI
-- yyyy.mm.dd
SELECT CONVERT(varchar(100),GETDATE(),2);
-- yy.mm.dd
SELECT CONVERT(varchar(100),GETDATE(),102);
--
-- 英国 / 法国
-- dd/mm/yy
SELECT CONVERT(varchar(100),GETDATE(),3);
-- dd/mm/yyyy
SELECT CONVERT(varchar(100),GETDATE(),103);
--
-- 德国
-- dd.mm.yy
SELECT CONVERT(varchar(100),GETDATE(),4);
-- dd.mm.yyyy
SELECT CONVERT(varchar(100),GETDATE(),104);
--
-- 意大利
-- dd-mm-yy
SELECT CONVERT(varchar(100),GETDATE(),5);
-- dd-mm-yyyy
SELECT CONVERT(varchar(100),GETDATE(),105);
--
-- dd mm yy
SELECT CONVERT(varchar(100),GETDATE(),6);
-- dd mm yyyy
SELECT CONVERT(varchar(100),GETDATE(),106);
--
-- mm dd, yy
SELECT CONVERT(varchar(100),GETDATE(),7);
-- mm dd, yyyy
SELECT CONVERT(varchar(100),GETDATE(),107);
--
-- mon dd yyyy hh:mi:ss:mmmAM(或 PM)
SELECT CONVERT(varchar(100),GETDATE(),9);
SELECT CONVERT(varchar(100),GETDATE(),109);
--
-- 美国
-- mm-dd-yy
SELECT CONVERT(varchar(100),GETDATE(),10);
-- mm-dd-yyyy
SELECT CONVERT(varchar(100),GETDATE(),110);
--
-- 日本
-- yy/mm/dd
SELECT CONVERT(varchar(100),GETDATE(),11);
-- yyyy/mm/dd
SELECT CONVERT(varchar(100),GETDATE(),111);
--
-- ISO
-- yymmdd
SELECT CONVERT(varchar(100),GETDATE(),12);
-- yyyymmdd
SELECT CONVERT(varchar(100),GETDATE(),112);
--
-- 欧洲默认设置 + 毫秒
-- dd mon yyyy hh:mi:ss:mmm(24h)
SELECT CONVERT(varchar(100),GETDATE(),13);
SELECT CONVERT(varchar(100),GETDATE(),113);
--
-- hh:mi:ss:mmm(24h)
SELECT CONVERT(varchar(100),GETDATE(),14);
SELECT CONVERT(varchar(100),GETDATE(),114);
--
-- ODBC 规范
-- yyyy-mm-dd hh:mi:ss(24h)
SELECT CONVERT(varchar(100),GETDATE(),20);
SELECT CONVERT(varchar(100),GETDATE(),120);
--
-- ODBC 规范(带毫秒)
-- yyyy-mm-dd hh:mi:ss.mmm(24h)
SELECT CONVERT(varchar(100),GETDATE(),21);
SELECT CONVERT(varchar(100),GETDATE(),121);
--
-- ISO8601
-- yyyy-mm-ddThh:mi:ss.mmm(无空格)
SELECT CONVERT(varchar(100),GETDATE(),126);
--
-- 带时区 Z 的 ISO8601。
-- yyyy-mm-ddThh:mi:ss.mmmZ(无空格)
SELECT CONVERT(varchar(100),GETDATE(),127);
--
-- 回历 (5)
-- dd mon yyyy hh:mi:ss:mmmAM
SELECT CONVERT(varchar(100),GETDATE(),130);
--
-- 回历 (5)
-- dd/mm/yy hh:mi:ss:mmmAM
SELECT CONVERT(varchar(100),GETDATE(),131);