【发布时间】:2018-11-28 19:39:44
【问题描述】:
我有一个用于连接 PROGRESS ODBC 的开放式查询,我无法从 SQL 获得等效的语法
SELECT DATEADD(DAY, -1, GETDATE())
【问题讨论】:
标签: sql openedge progress-db
我有一个用于连接 PROGRESS ODBC 的开放式查询,我无法从 SQL 获得等效的语法
SELECT DATEADD(DAY, -1, GETDATE())
【问题讨论】:
标签: sql openedge progress-db
Progress SQL 文档在这里:
虽然有 ADD_MONTHS(),但没有 DATEADD() 函数。我不是一个 SQL 编码员,但我希望您可以将一些东西与其他与日期相关的函数拼凑在一起。
【讨论】:
我想出了以下方法来获取日期大于两天前的记录:
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 进行此操作,那么这并没有多大帮助。
【讨论】: