SQL CONVERT

此函数将表达式从一种数据类型转换为另一种数据类型。如果 SQL Server 无法将表达式 CONVERT 为所需的数据类型,则会返回一个错误。在此 CONVERT 演示中,我们使用 Employee 表。

SQL Server CONVERT 函数语法

CONVERT 函数的语法

CONVERT (Data_Type [(Length)], Expression, [Style])

-- For example
SELECT CONVERT (VARCHAR(50), 245) AS [resultName]
FROM [Source]
  • Data_Type:指定您要将表达式转换到的数据类型
  • Length:这是一个可选的整数类型参数。您可以使用此参数指定目标数据类型的长度。默认值为 30。
  • 您希望将其转换为所需数据类型的表达式。
  • Style:使用此可选整数类型参数来定义样式。

SQL Server CONVERT 函数格式化日期

CONVERT 函数中提供了格式化样式的列表。

无世纪 (yy)带世纪 (yyyy)标准输入/输出
0 到 100这是 datetime 和 smalldatetime 的默认值月 日 年 时:分 上/下午 (AM/PM)
1101美国1 = 月/日/年
101 = 月/日/年年
2102ANSI2 = 年.月.日
102 = 年年年.月.日
3103英式/法式3 = 日/月/年
103 = 日/月/年年
4104德式4 = 日.月.年
104 = 日.月.年年
5105意式5 = 日-月-年
105 = 日-月-年年
61066 = 日 月 年
106 = 日 月 年年
71077 = 月 日, 年
107 = 月 日, 年年
8108时:分:秒
9 或 109默认值 + 毫秒月 日 年年 时:分:秒:毫秒 上/下午 (AM/PM)
10110美国10 = 月-日-年
110 = 月-日-年年
11111日本11 = 年/月/日
111 = 年年年/月/日
12112ISO12 = 年月日
112 = 年年年月月日日
13 或 113欧洲默认值 + 毫秒日 月 年年 时:分:秒:毫秒(24小时制)
14114时:分:秒:毫秒(24小时制)
20 或 120ODBC 规范年年年-月-日 时:分:秒 (24小时制)
21 或 121ODBC 规范(带毫秒)。这是 time、date、datetime2 和 datetimeoffset 的默认值年年年-月-日 时:分:秒.毫秒 (24小时制)
126ISO8601年年年-月-日 T 时:分:秒.毫秒(无空格)
127ISO8601 带时区 Z年年年-月-日 T 时:分:秒.毫秒 Z(无空格)
130回历日 月 年年 时:分:秒:毫秒 上/下午 (AM)
131回历日/月/年年 时:分:秒:毫秒 上/下午 (AM)

SQL CONVERT 函数格式化日期

在此示例中,我们将 CONVERT 函数应用于 GETDATE() 以不同的格式返回日期。

SELECT CONVERT(VARCHAR(50), GETDATE()) AS 'Result 1';

SELECT CONVERT(VARCHAR(50), GETDATE(), 100) AS 'Result 2';
SELECT CONVERT(VARCHAR(50), GETDATE(), 101) AS 'Result 3';
 
SELECT CONVERT(VARCHAR(50), GETDATE(), 102) AS 'Result 4';
SELECT CONVERT(VARCHAR(50), GETDATE(), 103) AS 'Result 5';
 
SELECT CONVERT(VARCHAR(50), GETDATE(), 104) AS 'Result 6';
SELECT CONVERT(VARCHAR(50), GETDATE(), 105) AS 'Result 7';
SELECT CONVERT(VARCHAR(50), GETDATE(), 110) AS 'Result 8';
SQL Server CONVERT Function to Format DATE 1

SQL Server CONVERT 货币格式示例

如果表达式为 money 或 small money,则可以使用 style 参数进行样式化。CONVERT 函数中提供的货币格式样式列表如下。

输出
0它只返回小数点后两位数字
1它将每三位数字用逗号分隔。它还将返回小数点后两位数字。
2此返回小数点后四位数字
126当转换为 char 或 varchar 时,这等效于 2。
DECLARE @Sale MONEY
SET @Sale = 1234567.98723

SELECT CONVERT(VARCHAR(50), @Sale) AS 'Result 1';

SELECT CONVERT(VARCHAR(50), @Sale, 0) AS 'Result 2';

SELECT CONVERT(VARCHAR(50), @Sale, 1) AS 'Result 3';
SELECT CONVERT(VARCHAR(50), @Sale, 2) AS 'Result 4';

SELECT CONVERT(VARCHAR(50), @Sale, 256) AS 'Result 5';
CONVERT Function to Format Money 2

SQL Convert float 值示例

当表达式为 float 或 real 时,我们可以使用 style 参数。以下是 CONVERT 函数中提供的格式化样式。

输出
0此返回最多 6 位数字
1它始终返回 16 位数字。始终使用科学计数法
2它始终返回 16 位数字。始终使用科学计数法
3它返回八位数字。始终使用科学计数法
DECLARE @Sale FLOAT
SET @Sale = 1234567.98723

SELECT CONVERT(VARCHAR(50), @Sale) AS 'Result 1';

SELECT CONVERT(VARCHAR(50), @Sale, 0) AS 'Result 2';

SELECT CONVERT(VARCHAR(50), @Sale, 1) AS 'Result 3';
SELECT CONVERT(VARCHAR(50), @Sale, 2) AS 'Result 4';

SELECT CONVERT(VARCHAR(50), @Sale, 3) AS 'Result 5';
convert Float to Varchar Example 3

NULL 值示例

在此 convert 函数示例中,我们将处理 NULL 值。

DECLARE @str AS VARCHAR(50)
SET @str = NULL

SELECT CONVERT(INT, @str) AS Result;

SELECT CONVERT(INT, NULL) AS Result;

假设我们使用 Convert 函数将 'Tutorial Gateway' 字符串转换为日期时间。如您所见,这是不可能的,因此它会返回一个错误作为输出。

SELECT CONVERT(INT, 'Tutorial Gateway') AS Result;

执行上面的 Transact 查询。

Msg 245, Level 16, State 1, Line 2
Failed converting the Varchar value 'Tutorial Gateway' to data type int.

在此 Convert Function 示例中,我们将把它应用于我们的 Employee 表。

SELECT TOP 1000 [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome] AS [Yearly Income]
      ,CONVERT(VARCHAR(50),[Sales], 2) AS [Sale Amount]
      ,CONVERT(VARCHAR(50), [HireDate], 113) AS [Hire Date]
  FROM [Employee]
CONVERT EXAMPLE on table Columns 6