在查询顶部定义日期

时间:2019-05-17 20:34:02

标签: sql oracle

我的数据中有很多硬编码的日期,而不是手动更改所有日期,我希望能够在代码顶部定义“开始日期”和“结束日期” 。类似于SAS中的MACROS,但在Oracle SQL中

我尝试在代码顶部使用DEFINE函数,但在实际执行时遇到错误

DEFINE start_Date = '01-SEP-2019';
DEFINE end_date = '30-SEP-2019';

SELECT *
FROM TABLE_NAME
WHERE LAST_PAID_DATE >= &start_date
  AND LAST_PAID_DATE <= &end_date

我希望这些日期能够使我的代码正常工作,就像我手动键入它们一样。相反,我收到此错误:

ORA-00904:“ SEP”:无效的标识符 00904. 00000-“%s:无效的标识符”

我定义的方式是将其存储在我所引用的表中的方式,但这告诉我在执行此操作时它无效

有帮助吗?

2 个答案:

答案 0 :(得分:2)

如果只有一个查询,则可以使用CTE(公用表表达式):

WITH PARAMS AS (
      SELECT DATE '2019-09-01' as start_date , DATE '2019-09-30' as end_date
      FROM dual
     )
SELECT *
FROM PARAMS CROSS JOIN
     TABLE_NAME
WHERE LAST_PAID_DATE >= PARAMS.start_date AND
      LAST_PAID_DATE <= PARAMS.end_date;

答案 1 :(得分:0)

如果您正在谈论sqlpus,请在变量名前加上''。除了也安全地放置to_date函数

To_date('&start', 'yyyymmdd')

现在提示输入日期格式