Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLite中存储和获取日期时间值_Sqlite - Fatal编程技术网

如何在SQLite中存储和获取日期时间值

如何在SQLite中存储和获取日期时间值,sqlite,Sqlite,我的表包含数据类型为datetime的Birthdate字段。 我想在今天过生日时拿到所有的唱片。 如何获取它?尝试以下查询: SELECT * FROM mytable WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday) SQLite对存储日期的支持非常差。您可以使用上面Nick D建议的方法,但请记住,此查询将导致完整表扫描,因为日期在SQLite中没有正确索引(实际上SQLite根本不支持将日期作为内置类型) 如果你真

我的表包含数据类型为datetime的Birthdate字段。 我想在今天过生日时拿到所有的唱片。 如何获取它?

尝试以下查询:

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的使用方法,这将非常有用。我很想知道其他操作符,比如
=
,是否能像预期的那样工作。另见。