如何在SQLite中存储和获取日期时间值
我的表包含数据类型为datetime的Birthdate字段。 我想在今天过生日时拿到所有的唱片。 如何获取它?尝试以下查询:如何在SQLite中存储和获取日期时间值,sqlite,Sqlite,我的表包含数据类型为datetime的Birthdate字段。 我想在今天过生日时拿到所有的唱片。 如何获取它?尝试以下查询: SELECT * FROM mytable WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday) SQLite对存储日期的支持非常差。您可以使用上面Nick D建议的方法,但请记住,此查询将导致完整表扫描,因为日期在SQLite中没有正确索引(实际上SQLite根本不支持将日期作为内置类型) 如果你真
SELECT * FROM mytable
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday)
SQLite对存储日期的支持非常差。您可以使用上面Nick D建议的方法,但请记住,此查询将导致完整表扫描,因为日期在SQLite中没有正确索引(实际上SQLite根本不支持将日期作为内置类型) 如果你真的想做一个快速查询,那么你必须添加一个单独的(整数)列来存储出生日期(1-31),并在数据库中为它附加一个索引 如果您只想比较日期,则可以添加一个(整数)列来存储日期UTC值(但此技巧不允许您轻松搜索单个日期组件)
祝你好运拥有一个特殊的datetime类型对我来说总是不必要的开销,整数速度快,灵活,占用空间少 对于常规日期时间值,请使用Unix历元时间戳。易于使用,极为灵活,以及时区(甚至日历!)不可知。(我最近写道)
这就是说,如果您只对公历中的日期感兴趣,您可能希望使用以下格式的大整数:YYYYMMDD,例如19761203。对于您的特定用法,您甚至可以创建一个四位整数,如MMDD,比如1703-这将导致快速选择 看起来SQLite可以将日期存储为unix时间:(请参阅“1.2日期和时间数据类型”)。所以没有浪费空间。至于将日期存储为YYYYMMDD这样的整数,那么有日期的生日呢?同一个月的生日呢?提取每个日期片段需要很多mod/div操作。在我看来,最好使用数据库的内置(优化和可读)工具,如NickD的answer.DATE或DATETIME,将其存储为数字(请参阅中的“2.2关联名称示例”)作为unix时间(请参阅“1.2日期和时间数据类型”一节)。存储日和月是一种可能的优化,存储另一个整数列是多余的。数据类型是什么?它是文本吗?或者可能是
BLOB
?如果文档说明了sqlite3\u bind\u xxxx的使用方法,这将非常有用。我很想知道其他操作符,比如=
,是否能像预期的那样工作。另见。