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

H2 Database Delete Records Older than particular Days

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

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

status需要匹配的参数还有一些。

我收到这个异常

Cannot parse "TIMESTAMP" constant "28-12-2017 03:12:47"; SQL statement:

我写的查询如下。

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 的更多信息,它是内部使用 h2 数据库的 RPA 工具,所以如果来自 workfusion 的任何人也可以帮助我。

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

您应该使用:

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

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