如何比较sql脚本中的日期以进度数据库?

时间:2019-06-03 10:56:48

标签: openedge progress-4gl progress-db

我们的进度数据库中有一个字段DATETIME-TZ,因此数据示例为“ 23/05/2019 12:11:16.099”-我需要一些帮助来比较该字段中的日期与SQL选择语句

在过程编辑器中,我可以轻松比较日期,例如

从accadd中选择日期(绑定号),其中日期(绑定号)<=今天

这很完美,但是我需要通过sql来获取网页的信息,并且出现错误,甚至将字段分解为子字符串并备份日期似乎也不起作用

SELECT date(“” bond-no“”)FROM accadd WHERE date(“” bond-no“”“)<= Date()

已经尝试了上述方法的变体,而且也...

DATE(SUBSTRING(“” bond-no“”,4,2),SUBSTRING(“” bond-no“”,1,2),SUBSTRING(“” bond-no“”,7,4))

这应该返回的日期早于今天,但只是得到了旧的语法不正确的消息,因此我在某处缺少了一些内容

[DataDirect] [ODBC Progress OpenEdge Wire Protocol驱动程序] [OPENEDGE] SQL语句中的语法错误,在“)FROM accadd WHERE”处或附近(10713)

2 个答案:

答案 0 :(得分:1)

在PDSOE中使用在日期时间(无-tz)字段上使用JDBC的SQL编辑器:

SELECT "bond-no" FROM pub.accadd WHERE "bond-no" <= CURDATE()

要使用静态日期:

SELECT "bond-no" FROM pub.accadd WHERE "bond-no" <= TO_DATE('5/31/2019')

或者:

SELECT "bond-no" FROM pub.accadd WHERE "bond-no" <= { d'5/31/2019' }

答案 1 :(得分:0)

您确实需要用引号引起来,因为它包含一个破折号,但是您的示例代码将双引号引起来。您是否尝试过:

SELECT date("bond-no") FROM accadd WHERE date("bond-no") <= Date()

我不确定为什么要这样做,但是我认为您不需要在“ bond-no”周围加上DATE()函数。 DATE()是一个4gl函数,因此当您在“过程编辑器”中并使用嵌入式SQL时,它可以工作,但OpenEdge SQL92引擎没有DATE()函数。但是,有一个TO_DATE()函数:   https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dmsrf%2Fto-date.html%23wwID0EXIOS

以下内容适用于sports2000数据库和sqlexp(而不是过程编辑器中的嵌入式sql):

select * from pub.order where orderdate < '1/1/1999'

我还添加了一个名为“ tstamp”的datetime-tz字段,对其进行了初始化并尝试如下操作:

select tstamp from pub.order where tstamp < '1/1/1999'

也很好。