SQLite strftime() 返回带有整数的空值

SQLite strftime() returning null with integers

我的 table“作品”中有一个列名为“date”的日期,以 Unix 格式存储为整数(示例:1548263300000)。我只想检索年份。当我这样做时:

SELECT strftime('%Y ',date) as year
FROM productions 

它 returns 没有。

当我将类型更改为 TEXT 到我的 table 并且我以字符串格式存储日期(例如 2020-05-01 )时,与 sql returns 我一样“ 2020" 这是正确的,也是我正在寻找的。

为什么 strftime() 不适用于整数,因为 SQLite documentation 说您可以使用 TEXT、INTEGER 和 REAL 作为日期?如何使用带整数的日期函数?

补充信息:

在本教程中,他们还将 strftime 与整数一起使用,这似乎对他们有用,所以我从中了解到,无论您使用什么类型(文本、整数、实数),这些函数都可用:link

当我使用:

SELECT strftime('%Y',DATETIME(ROUND(date/ 1000), 'unixepoch')) 
FROM productions;

它工作正常,但我不明白为什么当我使用整数时我必须这样做,但是当我使用文本时,它直接工作。

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

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

因此您的 date / 1000 被识别为自 1970-01-01.

以来的秒数

来自Date And Time Functions

The "unixepoch" modifier (11) only works if it immediately follows a timestring in the DDDDDDDDDD format. This modifier causes the DDDDDDDDDD to be interpreted not as a Julian day number as it normally would be, but as Unix Time - the number of seconds since 1970.