如何在 SQL Server (T-SQL) 中更改当前日期格式
当您连接到 SQL Server 时,日期格式通常由您的语言决定。会话的默认语言是该会话登录的语言,除非使用开放式数据库连接 (ODBC) 或 OLE DB API 在每个会话的基础上重写。
日期格式设置会影响字符串的解释,因为它们将转换为日期值以存储在数据库中。它不会影响存储在数据库中的日期数据类型值的显示或存储格式。
尽管会话的语言决定了日期格式,但您可以根据需要覆盖日期格式。例如,如果您的语言是 ,则日期格式将为(因此 07/01/2018 表示 7 月 1 日而不是 1 月 7 日)。您可以更改此设置,以便日期格式为(或任何其他格式),而语言保持不变。us_english``mdy``dmy``us_english
可以使用 T-SQL 通过语句显式设置当前会话的日期格式。SET DATEFORMAT
语法
语法是这样的:
SET DATEFORMAT { format | @format_var }
日期部分的顺序在哪里。format | @format_var
有效值为 、、、 和 。这些可以是转换为 Unicode 的 Unicode 或双字节字符集 (DBCS)。mdy``dmy``ymd``ydm``myd``dym
但是,请注意,日期**、日期时间 2 和日期时间偏移量**数据类型不支持。ydm
示例
在我们更改任何内容之前,让我们看一下当前的用户选项。这将告诉我们当前语言是什么和日期格式(以及其他一些事情):
DBCC USEROPTIONS;
输出:
+-------------------------+----------------+
| Set Option | Value |
|-------------------------+----------------|
| textsize | -1 |
| language | us_english |
| dateformat | mdy |
| datefirst | 7 |
| lock_timeout | 5000 |
| quoted_identifier | SET |
| arithabort | SET |
| ansi_null_dflt_on | SET |
| ansi_warnings | SET |
| ansi_padding | SET |
| ansi_nulls | SET |
| concat_null_yields_null | SET |
| isolation level | read committed |
+-------------------------+----------------+我们可以看到语言是,日期格式是(这是该语言的默认日期格式)。us_english``mdy
因此,让我们更改日期格式,然后再次检查用户选项:
SET DATEFORMAT dmy; DBCC USEROPTIONS;
输出:
+-------------------------+----------------+
| Set Option | Value |
|-------------------------+----------------|
| textsize | -1 |
| language | us_english |
| dateformat | dmy |
| datefirst | 7 |
| lock_timeout | 5000 |
| quoted_identifier | SET |
| arithabort | SET |
| ansi_null_dflt_on | SET |
| ansi_warnings | SET |
| ansi_padding | SET |
| ansi_nulls | SET |
| concat_null_yields_null | SET |
| isolation level | read committed |
+-------------------------+----------------+我们可以看到日期格式已更改,而语言保持不变。
因此,这是如何在不更改语言的情况下更改日期格式。如前所述,如果您更改语言,它将同时隐式设置日期格式。如果这是您要执行的操作,请查看如何在SQL Server中设置当前语言(T-SQL)。