【问题标题】:T-SQL date data type format for SQL Server mm/dd/yy or yy/dd/mm or something else?SQL Server mm/dd/yy 或 yy/dd/mm 或其他什么的 T-SQL 日期数据类型格式?
【发布时间】:2020-10-25 09:56:01
【问题描述】:

我正在使用这个版本的 SQL Server

Microsoft SQL Server 2019 (RTM-GDR) (KB4517790) - 15.0.2070.41 (X64)   Oct 28 2019 19:56:59   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19041: ) (Hypervisor) 

关于区域设置的信息

select @@LANGUAGE;
-- result: us_english

我阅读了参考文件

(来源:https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql?view=sql-server-ver15

我有

DECLARE @date DATE = '12/10/05';
DECLARE @datetime DATETIME = @date;

SELECT @date AS '@date', @datetime AS '@datetime';

正如参考文档指出的那样,我认为它是 mm/[yy]yy/dd12/10/05;1910 年 12 月 5 日),但它返回 2005 年 12 月 10 日

参考文件有误吗?这些格式如何通俗易懂?如何理解和记忆?

【问题讨论】:

  • 参考文档还允许使用mm/dd/yy,这无疑是您默认日期格式的设置方式。使用CONVERT 确保您的字符串日期按预期解析总是最安全的...
  • 请注意 12/10/05 因为 mm/yy/dd 实际上是 2010 年 12 月 5 日。请参阅 two digit year cutoff option
  • 您应该阅读您所引用的整个文档。 1) 绝对不是 1910,因为 49 以下的两位数年份被解释为 20xx(除非您另有配置) 2) “默认日期格式由当前语言设置确定。您可以使用SET LANGUAGE 和 SET DATEFORMAT 语句。”(引自参考文档)
  • 此外,您不应依赖于您的 sql 实例的特定设置,而应使用明确的格式,如 yyyy-mm-dd 或使用 CONVERT,您可以自己指定格式
  • @Nick 我读了你的第二条评论,然后编辑了问题,这是我的错误。

标签: sql sql-server tsql sql-server-2017


【解决方案1】:

第一件事是第一 - None of the Date/Time data types is stored with the display format in SQL Server.
其次,您已经执行了select @@LANGUAGE; 并返回了us_english - 继续运行

SELECT dateformat 
FROM sys.syslanguages
WHERE [Name] = @@LANGUAGE;

你会看到mdy的结果——这意味着日期值的字符串表示格式是以下之一:

  • [m]m/dd/[yy]yy
  • [m]m-dd-[yy]yy
  • [m]m.dd.[yy]yy

第三,你应该知道,在处理 SQL Server 时,语言设置与登录的默认语言有关,这意味着不同的登录可能有不同的语言设置,当然也可以更改 language 和/或 date format 设置 - 得出结论 -

您不应该依赖语言设置来表示日期/时间字符串。相反,请使用ISO 8601 中指定的格式之一,因为这是唯一能保证正确解释为有效日期/时间值的两种格式,无论语言和日期格式设置如何,也无论实际数据类型如何,@987654325 @ 这就是原因之一why you should never use DateTime again)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多