此函数将表达式从一种数据类型转换为另一种数据类型。如果 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) |
| 1 | 101 | 美国 | 1 = 月/日/年 101 = 月/日/年年 |
| 2 | 102 | ANSI | 2 = 年.月.日 102 = 年年年.月.日 |
| 3 | 103 | 英式/法式 | 3 = 日/月/年 103 = 日/月/年年 |
| 4 | 104 | 德式 | 4 = 日.月.年 104 = 日.月.年年 |
| 5 | 105 | 意式 | 5 = 日-月-年 105 = 日-月-年年 |
| 6 | 106 | – | 6 = 日 月 年 106 = 日 月 年年 |
| 7 | 107 | – | 7 = 月 日, 年 107 = 月 日, 年年 |
| 8 | 108 | – | 时:分:秒 |
| – | 9 或 109 | 默认值 + 毫秒 | 月 日 年年 时:分:秒:毫秒 上/下午 (AM/PM) |
| 10 | 110 | 美国 | 10 = 月-日-年 110 = 月-日-年年 |
| 11 | 111 | 日本 | 11 = 年/月/日 111 = 年年年/月/日 |
| 12 | 112 | ISO | 12 = 年月日 112 = 年年年月月日日 |
| – | 13 或 113 | 欧洲默认值 + 毫秒 | 日 月 年年 时:分:秒:毫秒(24小时制) |
| 14 | 114 | – | 时:分:秒:毫秒(24小时制) |
| – | 20 或 120 | ODBC 规范 | 年年年-月-日 时:分:秒 (24小时制) |
| – | 21 或 121 | ODBC 规范(带毫秒)。这是 time、date、datetime2 和 datetimeoffset 的默认值 | 年年年-月-日 时:分:秒.毫秒 (24小时制) |
| – | 126 | ISO8601 | 年年年-月-日 T 时:分:秒.毫秒(无空格) |
| – | 127 | ISO8601 带时区 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 货币格式示例
如果表达式为 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';

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';

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]
