0

我正在使用 SQLite SQL 语句或查询。

到目前为止,我能够通过询问 stackoverflow 问题来弄清楚一些事情,这些问题在执行此类 SQL 语句时可能会导致问题。

但是,我仍然无法得到任何结果?

这是我的 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 语句也不起作用。我这样说对吗?

在此处输入图像描述

4

2 回答 2

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 文本转换为日期时间类型。

于 2012-08-06T14:00:10.953 回答
0

尝试在 8/1 和 8/3 之间使用,你会得到 8/2 的。

你拥有它的方式应该在两次之间拉起警报

编辑

你能改变你ALARMTIMEDATETIME格式吗?然后,您将能够使用 Between,并且您不必将文本转换为DATETIME.

如果您转换为DATETIME类型,您的查询将具有更好的灵活性。将来也会更容易使用。

我相信这DATETIME是一个重载的文本类型,所以它应该输出文本

于 2012-08-03T19:55:58.373 回答