首页 > 解决方案 > H2 数据库删除早于特定日期的记录

问题描述

我必须通过将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 的任何人,他们也可以帮助我。

标签: sqlh2sql-deletedatetime-parsing

解决方案


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

你应该使用:

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

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


推荐阅读