2012-08-02 107 views
1

让我们只是说我有一个人名和他们的生日(日期和时间)表。我希望能够使用SQLite的以下SQL为今天查找人们的生日(日期和时间)。什么是Sqlite SQL语句只查找今天的记录?

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

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

究竟是什么错我的SQL语句?如果是这样,那么查询今天日期的正确SQL语句是什么。

UPDATE:

下面是使用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 
+2

生日不是在同一年。您可能想要比较日月,而不是年。 – 2012-08-02 14:23:39

+0

@NikolaMarkovinović,是的,这是一个不好的例子,但你明白了。 :)我可以说这个表是一个报警日志,我想查找今天的所有报警日志。 – ThN 2012-08-02 14:30:47

+0

;-D在这种情况下,你需要或者截断'BDay'仅日期,或者更好,过滤器,其中BDAY> = my_date和BDAY <(my_date + 1天)。不幸的是我不使用sqlite,所以我无法提供确切的语法。 – 2012-08-02 14:34:12

回答

0

这里就是我的回答。

因为我的专栏ALARMTIME是文本,我能查询我的桌子下面的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文本转换为日期时间类型。

0

我没有一个实例纺达但这应该工作。

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

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

2012-08-02 00:00:00 

是错误与查询的是,它可能会丢失毫秒或一些其它精密这将始终评估为假的东西。