sqlite - 获取sqlite的日月日
问题描述
当我想在没有时间的情况下获取日期时
SELECT strftime('%Y-%m-%d',date) from nameTable
我总是得到这个结果:-471-11-24
解决方案
更新
数据库中的实际值为 1593742280658
这似乎是SQLite 无法处理的Unix 纪元时间 (以毫秒为单位)。你需要把它变成秒,然后用修饰符告诉strftime
你想要 unix 纪元时间。unixepoch
sqlite> SELECT strftime('%Y-%m-%d', 1593742280658/1000, 'unixepoch');
strftime('%Y-%m-%d', 1593742280658/1000, 'unixepoch')
-----------------------------------------------------
2020-07-03
为什么-471-11-24
?这就是你从中得到的SELECT strftime('%Y-%m-%d', 0);
。如果没有unixepoch
修饰符,SQLite 将整数解释为儒略日数,即自公元前 4714 年 11 月 24 日以来的天数。
你得到-471,而不是-4714,因为%Y
只有四个字符的空间。select date(0)
会全力以赴-4713-11-24
。
select strftime('%Y-%m-%d', 1593742280658)
SQLite 试图将 1593742280658 解释为儒略日。这远远超出了其定义的范围,因此任何事情都可能发生。
这些函数仅适用于 0000-01-01 00:00:00 和 9999-12-31 23:59:59 之间的日期(儒略日编号 1721059.5 到 5373484.5)。对于超出该范围的日期,这些函数的结果是未定义的。
在我的实现中,我得到一个空字符串。在您看来,您似乎得到了朱利安第 0 天。
日期列是日期类型
SQLite没有真正的日期类型。
SQLite 没有为存储日期和/或时间预留存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:
- TEXT 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
- REAL 作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。
- INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。
并且与其他 SQL 数据库不同,SQLite 类型由值决定。它将忽略您的类型声明。
SQLite 版本 3 数据库中的任何列,除了 INTEGER PRIMARY KEY 列,都可以用于存储任何存储类的值。
如果你把42
它nameTable.date
存储为一个整数。如果你把'fourty-two'
它nameTable.date
存储为文本。
推荐阅读
- python-3.x - 如何使用python根据某些条件选择命令输出的特定部分
- google-cloud-platform - 如何在谷歌云引擎上的python虚拟环境中连续运行
- node.js - 如何使用 .env Nodejs 设置 NODE_PATH
- extjs - 如何允许文本框在 extjs 中只取数字
- android - 将版本升级到 0.60.4 后 React Native TypeError
- c - 为什么'&&'可以用来判断最大界限?
- tensorflow - 如何修复 MNIST 手写数据集的 lstm 和 cnn 代码
- python - 如何修复:pywintypes.com_error:(-2147352573,'未找到成员。',无,无)
- regex - 使用正则表达式对密码进行特殊字符验证
- c# - 如何在 C# 中将所有数组值提取到 datagridview?