H2数据库删除记录早于特定日期

时间:2018-10-10 07:22:21

标签: sql h2 sql-delete datetime-parsing

我必须通过将completed_date列与当前时间戳(天差大于1(或天数))匹配来从H2数据库中删除所有记录。

数据库模式存在一个问题,completed_date以给定格式11-Jan-2018 15:35:30 PM,即'dd-MMM-yyyy HH:mm:ss aaa'的形式存储为字符串。

还有更多应与状态匹配的参数。

我收到此异常

  

无法解析“ TIMESTAMP”常量“ 28-12-2017 03:12:47”; SQL语句:

我写的查询如下。

delete from TABLE_NAME
where 
status = 'status1'
OR status = 'status2'
OR status = 'status3' 
AND
TIMESTAMPDIFF(DAY,TO_CHAR(PARSEDATETIME(completed_date,'dd-MMM-yyyy HH:mm:ss    
aaa'),'dd-MM-yyyy HH:mm:ss'),CURRENT_TIMESTAMP()) >= 1; 

在上面的查询中,我发现TIMESTAMPDIFF不适用于日期格式dd-MMM-yyyy HH:mm:ss aaa,因此首先我尝试将其解析为'dd-MM-yyyy HH:mm:ss'格式如果在下面的查询中使用此查询,它将为我提供适当的结果

SELECT TO_CHAR(PARSEDATETIME('2017-OCT-2017 15:49:47 PM','dd-MMM-yyyy 
HH:mm:ss aaa') 
,'dd-MM-yyyy HH:mm:ss') 

仅提供一些更多信息,我正在编码Workfusion,它是RPA工具,内部使用h2-数据库,因此,如果这里有来自Workfusion的人员,他们也可以为我提供帮助。

1 个答案:

答案 0 :(得分:1)

timestampdiff()将两个时间戳记作为输入,但是您正在传递字符串和时间戳记。因此,该字符串会使用某种默认格式转换回时间戳。

您应该使用:

TIMESTAMPDIFF(DAY,PARSEDATETIME(completed_date,'dd-MMM-yyyy HH:mm:ss aaa'), CURRENT_TIMESTAMP())

(假设parsedatetime()可以成功解析字符串)