sql - SQLite strftime() 返回 null 和整数
问题描述
我的表“productions”中有一个列名为“date”的日期,以 Unix 格式存储为整数(例如:1548263300000)。我只想检索年份。当我做:
SELECT strftime('%Y ',date) as year
FROM productions
它返回空值。
当我将类型更改为 TEXT 到我的表中并以字符串格式存储日期(例如 2020-05-01 )时,相同的 sql 返回“2020”,这是正确的,也是我正在寻找的。
为什么 strftime() 不适用于整数,因为SQLite 文档说您可以使用 TEXT、INTEGER 和 REAL 作为日期?如何使用带整数的日期函数?
额外的信息:
在本教程中,他们还将 strftime 与整数一起使用,它似乎对他们有用,所以我从中了解到,无论您使用什么类型(文本、整数、真实),这些函数都可用:链接
当我使用:
SELECT strftime('%Y',DATETIME(ROUND(date/ 1000), 'unixepoch'))
FROM productions;
它工作得很好,但我不明白为什么我在使用整数时必须做这一切,但当我使用文本时,它直接工作。
解决方案
您可以使用strftime()
,但必须添加'unixepoch'
修饰符:
strftime('%Y', date / 1000, 'unixepoch')
所以你date / 1000
被认为是从 开始的秒数1970-01-01
。
从日期和时间函数:
“unixepoch”修饰符 (11) 仅在它紧跟在 DDDDDDDDDD 格式的时间字符串之后才有效。此修饰符导致 DDDDDDDDDD 不像通常那样被解释为儒略日数,而是 Unix 时间 - 自 1970 年以来的秒数。
推荐阅读
- java - 具有自己的数据库用户详细信息的云端点的自定义身份验证
- javascript - 媒体内容的不同路径
- mysql - 按条件用其他列值更新 Sql 列
- javascript - 即使从应用程序切换后,如何确保我添加到列表中的内容仍然存在
- node.js - 使用 Typescript 向 expressjs 中的 req 对象添加属性
- python - numpy linalg.solve,不是方阵
- micronaut - Micronaut 为 MySQL 配置 micronaut-jdbc-tomcat 数据源
- android - ADB 无法连接到 ip 地址
- java - 错误 404--未找到服务器未找到任何与请求 URI 匹配的内容
- javascript - 图片预览后热自动上传图片到服务器