【问题标题】:How to select from datetime in sqlite?如何从sqlite中的日期时间中选择?
【发布时间】:2011-02-18 22:12:04
【问题描述】:

Joined 是数据库中的 datetime 数据类型列,日期保存为 '12/05/2010 15:54:32' 这是我的查询:

SELECT * 
FROM users 
WHERE joined BETWEEN '12/05/2010 00:00:00' AND '12/05/2010 23:59:59' 
ORDER BY id ASC

但它不起作用。它不返回任何行。

那么我如何得到它们呢?


解决方案:

SELECT * 
FROM users 
WHERE joined BETWEEN '2010-05-05 00:00:00' AND '2010-05-12 23:59:59'
ORDER BY id ASC

【问题讨论】:

  • 59:59:59 的前 59 代表什么?

标签: vb.net datetime sqlite select


【解决方案1】:

我意识到这不是答案,
但也许它可以帮助缩小问题所在。

编辑:
这也适用于 shell:

sqlite> create table t (ts);
sqlite> insert into t values ('12/05/2010 15:54:32');
sqlite> SELECT * 
   ...> FROM t 
   ...> WHERE ts 
   ...> BETWEEN '12/05/2010 00:00:00' AND '12/05/2010 23:59:59';
12/05/2010 15:54:32

以下在 Python 中适用于我:

>>> import sqlite3
>>> conn = sqlite3.connect(":memory:")
>>> c = conn.cursor()
>>> c.execute("CREATE TABLE t (ts)")
<sqlite3.Cursor object at 0x7fe88ebbac90>
>>> conn.commit()
>>> c.execute("INSERT INTO t VALUES ('12/05/2010 15:54:32');")
<sqlite3.Cursor object at 0x7fe88ebbac90>
>>> conn.commit()
>>> c.execute("""
SELECT * 
FROM t 
WHERE ts 
BETWEEN '12/05/2010 00:00:00' AND '12/05/2010 23:59:59'
""").fetchall()
[(u'12/05/2010 15:54:32',)]

【讨论】:

  • 技术上是我正在使用的。我已经在 SQLite Administrator 中测试了 qhe 查询,但没有结果。连接字段是一个日期时间,sqlite 说日期时间应该保存为字符串。
  • 而 ts 是 'text' 或 'datetime' 数据类型?
  • @Sein:SQLite 没有“日期时间”数据类型。日期存储为文本。
  • 这是一个参考:sqlite.org/datatype3.html#affinity 在这种情况下,我没有使用类型,所以它默认为 None。
  • 我想通了。要检索结果,我必须将 / 替换为 - 并反转日期:SELECT * FROM users WHERE join BETWEEN '2010-05-05 00:00:00' AND '2010-05-12 23:59:59' ORDER BY id ASC
【解决方案2】:

如果您将日期存储为字符串,则应使用“YYYY-MM-DD HH:MM:SS”格式。这些将按时间顺序排序,并具有在 SQLite 的日期和时间函数中被接受的额外好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 2019-06-20
    • 2021-03-27
    • 2010-12-17
    • 2020-09-21
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多