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

Sql H2数据库删除早于特定日期的记录,sql,h2,sql-delete,datetime-parsing,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

我必须通过将
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,这是一个内部使用h2数据库的RPA工具,如果这里有来自Workfusion的人,他们也可以帮助我。

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

您应该使用:

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

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

在VARCHAR列中存储时间戳是多么愚蠢的工具。我一直在想,为什么那些对如此愚蠢的设计决策负责的人从来没有被强迫去处理他们所做的事情。一个工具可以用日期-时间格式存储它们,但不知何故犯了错误。请现在就要解决方案。在数据库中我看不到它以这种格式存储2018年1月11日15:35:30 pm请回答您的问题(通过单击下面的链接),并为相关表格添加
CREATE TABLE
语句。得到了Thanx的帮助解决方案…它成功了!非常感谢……这里只需要了解一件事,TIMESTAMPDIFF可以处理两种不同的日期格式吗?@NitinRathod A
timestamp
(或
Date
)值没有“格式”-这就是使用正确数据类型的全部意义。您可以以任何喜欢的格式输出该值,但在内部它是一个二进制值。打印/显示该值时(例如,通过SQL客户机)会应用您看到的任何格式—您假设
时间戳
值具有“格式”让我觉得这个表并没有真正将它们存储为
varchar
…因此,如果“completed_date”在数据库中存储为日期和时间格式,那么我就不必使用PARSEDATETIME,对吗?直接输入完成日期会有效吗?@NitinRathod:正确。这就是为什么我要表的定义哦…好的!谢谢你的投入。