首页 > 解决方案 > 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;

它工作得很好,但我不明白为什么我在使用整数时必须做这一切,但当我使用文本时,它直接工作。

标签: sqlsqlitedatestrftime

解决方案


您可以使用strftime(),但必须添加'unixepoch'修饰符:

strftime('%Y', date / 1000, 'unixepoch')

所以你date / 1000被认为是从 开始的秒数1970-01-01

日期和时间函数

“unixepoch”修饰符 (11) 仅在它紧跟在 DDDDDDDDDD 格式的时间字符串之后才有效。此修饰符导致 DDDDDDDDDD 不像通常那样被解释为儒略日数,而是 Unix 时间 - 自 1970 年以来的秒数。


推荐阅读