如何在sqlite中使用strftime函数提取Year,而datetime的格式不同于通常的格式

问题描述

在学习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)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...