我正在使用SQLite SQL语句或Query。
到目前为止,我能够通过询问在执行此类SQL语句时可能导致问题的stackoverflow问题来弄清楚一些事情。
但是,我仍然无法获得任何结果?
这是我的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 DateTime(ALARMTIME) BETWEEN datetime("2012-08-02 00:00:00")
AND datetime("2012-08-03 00:00:00")
ORDER BY ALARMTIME DESC
这是我在datagridView控件中查看的表格: 正如你所看到的,我在昨天和前一天都有记录。
我更正了所有有关其格式的列,例如我的ALARMTIME,它是数据类型的TEXT。仍然没有得到任何结果,我决定直接在SQLite Administrator应用程序中运行SQL语句,如下所示。令人惊讶的是,我得到了相同的结果,对于数据集来说,这是无关的或者是nill或null。但是,SQLite管理员向我显示DateTime仅接受TIMESTAMP作为参数而不接受TEXT。如果是这样,即使我有其他一切正确,我上面的SQL语句也不会起作用。我说的是对的吗?
答案 0 :(得分:1)
这是我的答案。根据我的理解,DATETIME应该将字符串或时间戳作为参数,但在我的情况下,它对我不起作用。
由于我的列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文本转换为日期时间类型。
答案 1 :(得分:0)
尝试在8/1和8/3之间使用,你将得到8/2的那些。
你拥有它的方式应该在两次之间拉出警报
修改强>
您可以将ALARMTIME
更改为DATETIME
格式吗?然后你就可以使用Between了,你不必将文本转换为DATETIME
。
如果转换为DATETIME
类型,您的查询将具有更好的灵活性。它将来也会更容易使用。
我认为DATETIME
是一个重载的文本类型,因此它应该输出文本