【问题标题】:Comparing SQL dates in SQL Standard format. Does it work always?比较 SQL 标准格式的 SQL 日期。它总是有效吗?
【发布时间】:2015-03-08 15:52:48
【问题描述】:

我正在寻找一些关于在 SQLite 中比较日期的答案,一些答案指出只要您的日期格式为:

YYYY-MM-DD HH:MM:SS(假设 HH:MM:SS 是 24 小时格式)

如果您将它们作为字符串进行比较(或者将一个日期与另一个日期进行比较,或者检查一个日期是否介于两个日期之间),那么您总是可以的。比如:

SELECT * FROM table WHERE 'YYYY-MM-DD' BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'

我注意到这种格式的一件事是它以可能的最高“范围”开始,年份,然后是月份等。我正在尝试了解这是否会一直有效(算法不是我的强项) ,所以我的问题是,是否有任何“边缘”案例无法解决?

【问题讨论】:

  • 判断字段是否等于日期(日期采用相同的字符串格式)或两个日期之间(格式相同)会起作用,但因为该字段实际上不是您想要的日期禁止自己使用日期和时间函数,而无需在每次在查询中使用该字段时将该字段转换为日期。您必须将substr 与每个感兴趣的组件的正确位置一起使用,而不是使用为此目的而设计的函数。为什么您不想将字段定义为它是什么(日期)?
  • @BrianDeMilia:SQLite 没有date 数据类型。

标签: sql sqlite date datetime time


【解决方案1】:

只要您的日期在 9999 年 1 月 1 日和 12 月 31 日之间,这将有效。这对于大多数应用程序来说已经足够了,但并不完全“总是”。

SQLite 在 1000 之前的年份前加上零。如果不是,则范围实际上是从 1000 年 1 月 1 日开始。

【讨论】:

  • @CL。 . . .我更新了答案。但是,在最初回答时,我真的不认为 0 到 999 之间的年份特别相关。他们不会改变答案的主旨,即“在所有实际情况下”而不是“总是”。
猜你喜欢
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多