使用 strftime 的 SQLite 自定义格式化日期

SQLite Custom Formatting Date using strftime

我有一个包含日期的小 table。对于特定的报告,我只想输出没有年份的月份和日期。 “君。 09”而不是“06/09/2020”。我一直在试验 strftime,但我可以让它工作。 strftime 只给我 NULL。

这里是 table 定义:

CREATE TABLE "visit_log" ("visit_date" DATE, "visit_time" TIME, "client_relation" TEXT, "household_size" INTEGER)

以下是其内容示例:

rowid   visit_date  visit_time  client_relation household_size
12  06/09/2020      Drop-In 8
13  06/09/2020      Drop-In 5
15  06/16/2020      Scheduled   1
16  06/16/2020      Scheduled   1
17  06/16/2020      Drop-In 4
18  06/16/2020      Drop-In 5

这是一个示例查询:

SELECT 
    visit_date,
    strftime('%Y', visit_date) as "Year",
    strftime('%m', visit_date) as "Month",
    strftime('%d', visit_date) as "Day"
FROM
    visit_log

这是输出样本。

visit_date  Year    Month   Day
06/09/2020  NULL    NULL    NULL
06/09/2020  NULL    NULL    NULL
06/16/2020  NULL    NULL    NULL
06/16/2020  NULL    NULL    NULL
06/16/2020  NULL    NULL    NULL
06/16/2020  NULL    NULL    NULL
06/16/2020  NULL    NULL    NULL

我错过了什么?

日期的格式化方式使得无法直接使用 SQLite 字符串函数(SQLite 需要类似 YYYY-MM-DD 的东西,而你有 MM/DD/YYYY)。

我建议修复您的数据,以便为您的日期字符串使用正确的格式。您可以使用以下 update 查询来执行此操作:

update visit_log 
set visit_date = 
    substr(visit_date, 7, 4) 
    || '-' || substr(visit_date, 1, 2) 
    || '-' || substr(visit_date, 4, 2)

同时,对于您当前的数据集,在这里使用字符串函数似乎更简单:

select
    visit_date,
    substr(visit_date, 7, 4) as "year",
    substr(visit_date, 1, 2) as "month",
    substr(visit_date, 4, 2) as "day"
from visit_log