如何在 sqlite 中使用 strftime() 函数提取日期时间格式与正常工作格式不同的年份

How to use strftime() function in sqlite for extracting Year where datetime is in a different format than what would normally work

在我的课程中学习 SQL 时,我使用了函数 YEAR(Start_Time) AS Year

Start_Time 是一个列 header。日期时间示例采用以下格式:26/12/2017 09:00:00 YEAR() 函数适用于 SQL.

但是,当我继续 SQLite(在 DB 浏览器上)时,该功能不起作用。我用的是strftime('%Y', 'Start_Time')。我知道 strftime 从左到右。有谁知道上面给出的日期时间格式在 sqlite 中与 YEAR() 等效的函数是什么?

在SQL中:

YEAR(Start_Time) AS Year

答案:

2017

在 sqlite 中:

YEAR(Start_Time)

答案:

function not recognized

strftime('%Y', 'Start_time')

答案:

function not recognized

SQlite 与其他 RDBMS 非常不同:它没有 date/time 类型。您只能将日期存储为数字或文本。

函数 strftime() 能够从存储在文本列中的日期中提取 date/time 信息,但它只有在您遵守 ISO8601 表示法时才有效:YYYY-MM-DD HH:MM:SS.SSS ,你的约会对象不是这种情况。

如果要使用 strftime() 从中提取年份,则需要先转换日期

对于你的情况,如果你只转换日期部分而不转换时间部分,那也行得通。

开始吧:

SELECT  Start_Time, 
        (substr(Start_Time,7,4) || '-' || substr(Start_Time,4,2) || '-' || substr(Start_Time,1,2)) as dateconverted,
        strftime('%Y', (substr(Start_Time,7,4) || '-' || substr(Start_Time,4,2) || '-' || substr(Start_Time,1,2)) ) as year
FROM test;

结果

Start_Time              dateconverted     year
26/12/2017 09:00:00     2017-12-26        2017

如果您想避免这种混乱,您只需从一开始就以正确的格式存储您的 dates/times,没有其他解决方法。

实现方式是您的第三选择。 strftime('%Y', 'time string')。确保时间字符串是接受格式之一的字符串。您可能会看到:(https://sqlite.org/lang_datefunc.html).