在Sqlite中的时间戳列中添加小时会导致NULL,为什么?

时间:2019-03-08 03:57:58

标签: sqlite datetime

我从以下位置得到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列?有什么解决方案?

Problem in one picture

2 个答案:

答案 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'
;

产生

enter image description here

答案 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