【问题标题】:SSMS DATEADD uses wrong region formatSSMS DATEADD 使用错误的区域格式
【发布时间】:2021-11-16 10:26:57
【问题描述】:

出于某种原因,特别是只有 DATEADD 函数使用区域格式 yyyy-dd-mm 而不是正常的 yyyy-mm-dd 用于其他所有内容。我不明白为什么会发生这种情况,我什至不是美国人。

对我来说 DATEADD(day, 7, '2021-09-01') 作为列返回的日期时间为 2021-01-16 00:00:00.000,而不是预期的 2021-09-08 00:00:00.000。

有人知道这是否是 SSMS 中具有 DATEADD 功能的已知问题吗?我正在使用 SQL Server Management Studio v17.9.1

【问题讨论】:

    标签: sql sql-server dateadd regional-settings


    【解决方案1】:

    这不是 SQL Server Management Studio (SSMS) 的问题,它只是一个 for SQL Server 的 IDE(告诉我们您正在使用 SSMS 17 就像告诉我们您正在使用Office 2016 当被问及您使用的是什么版本的 Windows 时),也不是 SQL Server,而是您的文字字符串。首先,您应该真正使用DATEADD 来对抗强类型的日期和时间值;那么你总是得到你期望的价值。

    然而,对于您的文字字符串,yyyy-MM-dd 的格式是不是明确的,因为在使用(旧)datetimesmalldatetime 数据类型时它的解释方式不同。 DATEADD(和DATEDIFF)将基于字符串的数据类型隐式转换为datetime;并且这种转换会根据您的语言设置进行解释(意味着您的格式不明确)。

    因此,解决方法是使用明确的格式。对于 SQL 服务器,它们是 yyyyMMddyyyy-MM-ddThh:mm:ss.nnnnnnn。所以DATEADD(day, 7, '20210901') 将返回 2021 年 9 月 8 日您的语言设置。

    【讨论】:

    • 感谢使用“20210901”而不是“2021-09-01”按预期工作。我不确定我是否完全理解你的意思,但我想我有一些关于“强类型日期和时间”和日期时间数据类型的阅读。无论如何都非常感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多