【问题标题】:How to compare dates in a sql script to progress database?如何将 sql 脚本中的日期与进度数据库进行比较?
【发布时间】:2019-10-18 22:09:09
【问题描述】:

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

进行中的程序编辑器,我可以很容易地比较日期,例如

select date(bond-no) from accadd where date(bond-no)

这很好用,但我需要通过 sql 获取网页的此信息,然后得到一个错误,甚至将字段分解为子字符串并使日期备份似乎不起作用

SELECT date(""bond-no"") FROM accadd WHERE date(""bond-no"")

已经尝试过上面的变体,这个也是......

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

这应该只返回比今天更早的日期,但只是得到旧语法不正确的消息,所以我在某处遗漏了一些东西

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

【问题讨论】:

    标签: openedge progress-4gl progress-db


    【解决方案1】:

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

    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' }
    

    【讨论】:

      【解决方案2】:

      您确实需要引用字段名称,因为它包含一个破折号,但您的示例代码有双引号。你试过了吗:

      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'
      

      效果也很好。

      【讨论】:

      • 是的,sql 语句在执行之前被加载到一个字符串中,所以我必须用破折号对所有字段进行双引号,例如 "SELECT date(""bond-no"") FROM accadd WHERE date(""bond-no"")
      • 表名也应该以 PUB 模式为前缀。 IE。 “pub.accadd”。
      • code CAST(SUBSTRING(""bond-no"",7,4) + '-' + SUBSTRING(""bond-no"",4,2) + '-' + SUBSTRING(""bond-no"",1,2) AS 日期)
      • 为什么要将日期转换为日期?这似乎毫无意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多