SET DATEFORMAT (Transact-SQL)

设置用于解释 date、smalldatetime、datetime、datetime2 和 datetimeoffset 字符串的月、日和年日期部分的顺序。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

主题链接图标Transact-SQL 语法约定

语法

SET DATEFORMAT { format | @format_var } 

参数

  • format | **@**format_var
    日期部分的顺序。有效参数为 mdy、dmy、ymd、ydm、myd 和 dym。可以是 Unicode,也可以是转换为 Unicode 的双字节字符集 (DBCS)。美国英语默认值为 mdy。有关所有支持语言的默认 DATEFORMAT,请参阅 sp_helplanguage (Transact-SQL)

注释

date、datetime2 和 datetimeoffset 数据类型不支持 DATEFORMAT ydm。

DATEFORMAT 设置对字符串解释的影响对于 datetime 和 smalldatetime 值与对于 date、datetime2 和 datetimeoffset 值可能不同,具体取决于字符串格式。在字符串转换为日期值以便存储在数据库中时,此设置会影响字符串的解释。它不会影响存储在数据库中的日期数据类型值的显示,也不会影响存储格式。

某些字符串格式(例如 ISO 8601)的解释与 DATEFORMAT 设置无关。有关如何将 DATEFORMAT 与不同格式一起使用的详细信息,请参阅使用日期和时间数据中的“字符串文字的日期和时间格式”部分。

SET DATEFORMAT 的设置是在执行或运行时设置,而不是在分析时设置。

SET DATEFORMAT 将覆盖 SET LANGUAGE 的隐式日期格式设置。

权限

要求具有 public 角色的成员身份。

示例

下例使用不同的日期字符串作为具有相同 DATEFORMAT 设置的会话中的输入。

-- Set date format to day/month/year.
SET DATEFORMAT dmy;
GO
DECLARE @datevar datetime2 = '31/12/2008 09:01:01.1234567';
SELECT @datevar;
GO
-- Result: 2008-12-31 09:01:01.123
SET DATEFORMAT dmy;
GO
DECLARE @datevar datetime2 = '12/31/2008 09:01:01.1234567';
SELECT @datevar;
GO
-- Result: Msg 241: Conversion failed when converting date and/or time -- from character string.

GO