我们的进度数据库中有一个字段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)
答案 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'
也很好。