【问题标题】:PROGRESS SYNTAX USING OPENQUERY FOR DATEADD EQUIVALENT使用 OPENQUERY 进行 DATEADD 等效项的进度语法
【发布时间】:2018-11-28 19:39:44
【问题描述】:

我有一个用于连接 PROGRESS ODBC 的开放式查询,我无法从 SQL 获得等效的语法

 SELECT DATEADD(DAY, -1, GETDATE()) 

【问题讨论】:

    标签: sql openedge progress-db


    【解决方案1】:

    Progress SQL 文档在这里:

    https://documentation.progress.com/output/OpenEdge117/openedge117/#page/dmsrf%2Fadd-months.html%23wwID0EGGFR

    虽然有 ADD_MONTHS(),但没有 DATEADD() 函数。我不是一个 SQL 编码员,但我希望您可以将一些东西与其他与日期相关的函数拼凑在一起。

    【讨论】:

      【解决方案2】:

      我想出了以下方法来获取日期大于两天前的记录:

      where tr_date = 
      to_date({ fn convert (month(curdate()), sql_varchar)} + '/' + { fn convert(dayofmonth(curdate()) -2, sql_varchar)} + '/' + { fn convert (year(curdate()), sql_varchar)})
      

      它严重依赖 curdate(),您显然不能在 select 语句中使用它,只能在 where 子句中使用它。

      在 SQL Server 中,我会在查询前面完成所有这些,将结果放在一个变量中,然后在查询的 where 子句中使用该变量,但 Progress 显然也没有变量的概念。

      上面的问题是它没有考虑月初,从 1 中减去 2 会导致 -1,因此日期无效。所以解决这个问题的算法变得更加复杂。如果您有变量,则更可行,但当您必须即时完成所有操作时会更棘手。

      我的目的是每天为使用 SSIS 的增量数据集成过程生成一个新查询。我切换到在 SQL Server 中动态生成查询并将结果插入到包读取的 SSIS 配置表中。使用这种方法,您最终会在 SQL Server 中使用良好的可靠 dateadd。不幸的是,如果您尝试在那里使用 SQL 进行此操作,那么这并没有多大帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多