我的数据中有很多硬编码的日期,而不是手动更改所有日期,我希望能够在代码顶部定义“开始日期”和“结束日期” 。类似于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:无效的标识符”
我定义的方式是将其存储在我所引用的表中的方式,但这告诉我在执行此操作时它无效
有帮助吗?
答案 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')
现在提示输入日期格式