构造函数DateTime是否将字符串或ONLY TIMESTAMP类型作为参数?

时间:2012-08-03 18:57:14

标签: sql database sqlite datetime

我正在使用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控件中查看的表格: 正如你所看到的,我在昨天和前一天都有记录。

enter image description here

我更正了所有有关其格式的列,例如我的ALARMTIME,它是数据类型的TEXT。仍然没有得到任何结果,我决定直接在SQLite Administrator应用程序中运行SQL语句,如下所示。令人惊讶的是,我得到了相同的结果,对于数据集来说,这是无关的或者是nill或null。但是,SQLite管理员向我显示DateTime仅接受TIMESTAMP作为参数而不接受TEXT。如果是这样,即使我有其他一切正确,我上面的SQL语句也不会起作用。我说的是对的吗?

enter image description here

2 个答案:

答案 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是一个重载的文本类型,因此它应该输出文本