问题描述
在学习SQL的同时,我使用了函数YEAR(Start_Time) AS Year
Start_Time
是列标题。日期时间示例采用以下格式:26/12/2017 09:00:00
YEAR()
函数可在SQL中使用。
但是,当我在数据库浏览器上使用SQLite时,该功能无法正常工作。我使用了strftime('%Y','Start_Time')
。我了解strftime从左到右。有人知道上面给出的日期时间格式的sqlite中与YEAR()
等效的功能是什么吗?
在SQL中:
YEAR(Start_Time) AS Year
答案:
2017
在sqlite中:
YEAR(Start_Time)
答案:
无法识别功能
strftime('%Y','Start_time')
答案:
无法识别功能
解决方法
SQlite与其他RDBMS完全不同:它没有日期/时间类型。您只能将日期存储为数字或文本。
函数strftime()
可以从文本列中存储的日期中提取日期/时间信息,但是只有在遵守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',2)) ) as year
FROM test;
结果
Start_Time dateconverted year
26/12/2017 09:00:00 2017-12-26 2017
如果要避免这种混乱情况,只需从一开始就以正确的格式存储日期/时间,就没有其他解决方法。
,这是您的第三选择。 strftime('%Y','time string')
。确保时间字符串是采用可接受格式之一的字符串。您可能会看到:(https://sqlite.org/lang_datefunc.html)。