如何在 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)。