【问题标题】:How does SQL Server figure out the entered date's format?SQL Server 如何判断输入日期的格式?
【发布时间】:2024-04-22 13:15:02
【问题描述】:

我使用 SQL Server 2014 开发人员。假设我有这种情况,我过滤发票的付款日期

select * 
from Invoices 
where PaymentDate > '1/2/2012'

Invoice表中PaymentDate的格式为2012-01-08 00:00:00 ( YYYY-MM-DD HH:MM:SS )

但是 where 的 RHS 操作数是 1/2/2012 那么,SQL 怎么知道这个格式是 M/D/YYYY 还是 D/M/YYYY 呢?

【问题讨论】:

  • @MitchWheat 但是它要进行比较,它应该知道 1/2/2012 , 1= month 2=date 因为如果它将这两个交换为 1 = date 和 2 = moth 那么选择的结果声明会有所不同?
  • 如果您遵循最佳实践建议,则无关紧要,但是是的,这取决于您的语言环境。

标签: sql sql-server database tsql date-format


【解决方案1】:

日期时间没有格式(二进制除外):它们(希望)被存储为datetime 而不是字符串。不要将演示与表示混淆。

当您有字符串文字 '1/2/2012' 时,SQL Server 通过您的语言环境进行解释。

始终以 ISO 8601 格式 yyyy-MM-dd (yyyyMMdd) 使用(和导出)日期的最佳做法。

ISO 8601
What date/time literal formats are LANGUAGE and DATEFORMAT safe?

【讨论】:

  • 对于 ISO 推荐 +1
最近更新 更多