【发布时间】:2012-06-06 10:36:42
【问题描述】:
我的表包含数据类型为日期时间的出生日期字段。 我想得到今天生日的所有记录。 我怎样才能得到它?
【问题讨论】:
标签: sqlite
我的表包含数据类型为日期时间的出生日期字段。 我想得到今天生日的所有记录。 我怎样才能得到它?
【问题讨论】:
标签: sqlite
试试这个查询:
SELECT * FROM mytable
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday)
【讨论】:
TEXT吗?或者BLOB?如果文档说明sqlite3_bind_xxxx 的用途会很有帮助。我很想知道其他运营商,如>=,是否按预期工作。另请参阅SQLite binding function in prepared statement。
对我来说,拥有一个特殊的日期时间类型似乎总是不必要的开销,整数快速、灵活并且使用更少的空间。
对于一般日期时间值,请使用 Unix 纪元时间戳。易于使用,极其灵活,并且与时区(甚至日历!)无关。 (我最近写了an article on using them, which I really have to plug...)
也就是说,如果您只对公历中的日期感兴趣,您可能希望使用以下格式的大整数:YYYYMMDD,例如 19761203。对于您的特殊用途,您甚至可以创建一个四位整数,如 MMDD ,比如说 1703 — 这一定会导致快速选择!
【讨论】:
SQLite 对存储日期的支持很差。您可以使用上面 Nick D 建议的方法,但请记住,此查询将导致全表扫描,因为 SQLite 中的日期未正确索引(实际上 SQLite 根本不支持将日期作为内置类型)。
如果您真的想进行快速查询,那么您必须添加一个单独的(整体)列来存储生日 (1-31),并在数据库中为其附加索引。
如果您只想比较日期,那么您可以添加一个 (INTEGER) 列来存储日期 UTC 值(但这个技巧不会让您轻松搜索单个日期组件)。
祝你好运
【讨论】: