【问题标题】:What is the Sqlite SQL statement to find todays records only?只查找今天的记录的 Sqlite SQL 语句是什么?
【发布时间】:2012-07-31 12:55:58
【问题描述】:

假设我有一张桌子,上面有人们的名字和他们的生日(日期和时间)。我希望能够使用以下 SQL for SQLite 找到人们今天的生日(日期和时间)。

SELECT * FROM Btable WHERE Bday = date('yyyy-MM-dd')

但是,它总是返回 nil 数据集。我还需要包括时间吗?

我的 SQL 语句到底有什么问题?如果是这样,查询今天日期的正确 SQL 语句是什么。

更新:

这是我使用 BETWEEN 逻辑的实际 SQL 语句:

SELECT * 
FROM Alarms 
WHERE ALARMSTATE IN (0,1,2) 
  AND ALARMPRIORITY IN (0,1,2,3,4) 
  AND ALARMGROUP IN (0,1,2,3,4,5,6,7) 
  AND ALARMTIME BETWEEN date(2012-08-02) 
                    AND date(2012-08-3) 
ORDER BY ALARMTIME DESC

【问题讨论】:

  • 生日不在同一年。您可能想要比较日期和月份,而不是年份。
  • @NikolaMarkovinović,是的,这是一个不好的例子,但你明白了。 :) 我可以说该表是一个警报日志,我想找到今天的所有警报日志。
  • ;-D 在这种情况下,您需要仅将 BDay 截断为日期,或者更好地过滤 BDay >= my_date 和 BDay
  • @NikolaMarkovinović,我还尝试了与您在之前评论中所说的非常相似的 BETWEEN 逻辑。它还返回 Nil 数据集。
  • 对于日期时间列,您最好使用 >= 和

标签: sql database sqlite date dataset


【解决方案1】:

我没有启动实例,但这应该可以。

SELECT * FROM Btable WHERE Bday >= julianday(date('now')));

这应该返回一个像这样的字符串:

2012-08-02 00:00:00

查询的问题在于它可能缺少毫秒或某些其他精度,这些精度总是会被评估为假。

【讨论】:

    【解决方案2】:

    这是我的答案。

    由于我的 ALARMTIME 列是 TEXT,我可以使用以下 SQL 语句查询我的表并检索我正在寻找的数据集。

    SELECT *
    FROM Alarms
    WHERE ALARMSTATE IN (0,1,2)
      AND ALARMPRIORITY IN (0,1,2,3,4)
      AND ALARMGROUP IN (0,1,2,3,4,5,6,7)
      AND ALARMTIME LIKE "2012/08/01%"
      ORDER BY ALARMTIME DESC
    

    我根本无法将我的 ALARMTIME 文本转换为日期时间类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2011-12-22
      相关资源
      最近更新 更多