gpt4 book ai didi

sql-server - TSQL 使用 dd-mm-yyyy 和 yyyy-mm-dd 有什么区别

转载 作者:行者123 更新时间:2023-12-03 02:01:10 25 4
gpt4 key购买 nike

出于兴趣,我有一个相当基本的问题。在 T-SQL(SSMS 等)中,使用 dd-mm-yyyy 和 yyyy-mm-dd 之间的“幕后”区别是什么?一个 where 语句。

例如,这两个查询给我不同的结果

select * from DB..table where application_date > '01-01-2019' and application_date < '01-06-2019' order by app_ID;

select * from DB..table where application_date > '2019-01-01' and application_date < '2019-06-01' order by app_ID;

第一个似乎是第二个的子集。作为比较,第一个为我提供了 83 条记录,而第二个为我提供了超过 11,000 条有变化的记录。

如果有人能启发我,理解它会很有趣。

最佳答案

日期时间值的字符串表示形式取决于文化。
例如,在美国,字符串表示格式为 MM/dd/yyyy,而在英国则为 dd/MM/yyyy
这意味着 SQL Server 将根据区域性设置将字符串文字转换为 datetime,具体来说,它是 DATEFORMAT - 除非字符串表示格式符合 ISO 8601标准 - 为 yyyy-MM-ddTHH:mm:ssyyyyMMddTHHmmss

但是,当从格式为 yyyy-MM-dd 的字符串转换仅日期值时,DateTime 数据类型存在一个鲜为人知的错误(或功能) ,转换仍然取决于区域性设置 - 而从备用 ISO 8601 格式 yyyyMMdd 进行转换对于所有日期时间数据类型都是完全安全的。

这可能是因为这种格式并非 ISO 8601 所独有 - 它也是 ODBC 规范格式的一部分 - 即 yyyy-MM-dd HH:mm:ss - 几乎与ISO 8601,只是用空格代替 T 作为日期部分和时间部分之间的分隔符。

此错误仅存在于 DateTime 数据类型中,并且是您应该始终首选使用更新且改进的 DateTime2 数据类型的几个原因之一。

有关更多信息,请阅读 Date conversion and culture: Difference between DATE and DATETIME.

TL;DR;
datetime一起使用的唯一安全的字符串表示日期格式是yyyyMMdd
所有其他格式转换均取决于文化,可能会产生错误或最糟糕的错误结果。

要点:

  • 如果可以的话,优先选择 DateTime2 而不是 datetime
  • 如果可以的话,最好避免使用日期时间的字符串表示形式。
  • 当您必须使用日期时间的字符串表示形式时,请始终使用 ISO 8601 格式之一 - yyyy-MM-ddTHH:mm:ssyyyyMMddTHHmmss
  • 当您必须使用 DateTime 和仅日期的字符串表示形式时,始终使用 yyyyMMdd

关于sql-server - TSQL 使用 dd-mm-yyyy 和 yyyy-mm-dd 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55274211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com