【问题标题】:Does constructor DateTime take string or ONLY TIMESTAMP type as parameter?构造函数 DateTime 是否将字符串或 ONLY TIMESTAMP 类型作为参数?
【发布时间】:2012-08-03 18:57:14
【问题描述】:

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

【问题讨论】:

  • 尝试 REM 去除 WHERE 语句中除一部分之外的所有内容,然后将它们一一添加,看看问题出在哪里。
  • @larryr,嗨,拉里,当我只删除日期和时间过滤器时,我的 SQL 语句确实有效。它返回记录,但是当我添加日期时间过滤器时,到目前为止它不会返回任何内容。

标签: sql database sqlite datetime


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

【讨论】:

    【解决方案2】:

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

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

    编辑

    您能否将您的ALARMTIME 更改为DATETIME 格式?然后您就可以使用Between,并且不必将文本转换为DATETIME

    如果您转换为DATETIME 类型,您的查询将具有更好的灵活性。以后也会更方便使用。

    我认为DATETIME是重载的文本类型,所以应该输出文本

    【讨论】:

    • Malione,我只是按照你的建议做了。我仍然没有得到任何结果。
    • 为什么不能转换成DATETIME
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多