我从以下位置得到NULL(无):
SELECT DATETIME(ServiceCall_CreatedOn,'-6 hours')AS'服务创建时间:' ...
其中ServiceCall_CreatedOn是一个Sqlite文本列,其中包含: “ 2019-01-20 4:48:11”(当然没有引号)
以下内容:
SELECT ServiceCall_CreatedOn AS'服务创建于:' ...
及以下
SELECT DATETIME('2019-01-20 4:48:11','-6 hours')AS'服务创建于:' ...
上班!!!!
为什么SQLite DATETIME时间减法使用日期文字而不使用ServiceCall_CreatedOn列?有什么解决方案?
答案 0 :(得分:2)
我认为您的问题是格式无效,因为您使用的是1位数而不是2位数。
那是
SELECT DATETIME('2019-01-20 4:48:11','-6 hours') AS 'Service Created On:'
返回null,而
SELECT DATETIME('2019-01-20 04:48:11','-6 hours') AS 'Service Created On:'
返回 2019-01-19 22:48:11
例如
SELECT
DATETIME('2019-01-20 4:48:11','-6 hours') AS 'Service Created On: Version1',
DATETIME('2019-01-20 04:48:11','-6 hours') AS 'Service Created On: Version2'
;
产生
答案 1 :(得分:1)
SQLite可以识别特定的日期时间格式,如您所见here。
您遇到的格式不是其中之一。
因此,您需要像这样重新格式化ServiceCall_CreatedOn
列的值:
SELECT DATETIME(
case when ServiceCall_CreatedOn like '% _:%'
then replace(ServiceCall_CreatedOn, ' ', ' 0')
else ServiceCall_CreatedOn
end,'-6 hours'
)
这不是很优雅,但是它只在需要时才在小时数前添加一个0
。