尝试使用 ORACLE 获取工作日列表时出现 ORA-00904
I got ORA-00904 when trying to get a list of working days with ORACLE
在我的项目中,我需要使用一个名为 getWorkingDay(beg_date Date,slider Integer)
的函数。此函数用于查找从日期 beg_date
开始的第 n 个最后工作日(其中 "n" 是 slider
的值)。
我想要做的是让所有工作日都在 beg_date
和 end_date
定义的日期范围内。我想使用 SELECT 语句和上面的函数来获取工作日列表。
我用 beg_date=sysdate-45
和 end_date=sysdate
尝试了这个语句:
SELECT * FROM(
SELECT getworkingDay(sysdate,slide) dt FROM DUAL
WHERE slide>0 and slide<=sysdate-(sysdate-45))
WHERE dt >=sysdate-45
我收到以下错误:
ORA-00904 : "SLIDE":invalid identifier
你能帮我找到解决这个问题的方法吗?
dual 中没有列名作为幻灯片。您需要 select 来自您的 table,其中包括 slide
列
您的函数 getWorkingDays
仅适用于一个日期。
如果你想让它在一个日期范围内工作,那么你需要在日期范围内的每一天调用一次。
使用您问题中的示例 sysdate - 45
,意味着您需要调用它 45 次,如
select getWorkingDays(sysdate - 45, 1) from dual
union
select getWorkingDays(sysdate - 44, 1) from dual
union
select getWorkingDays(sysdate - 43, 1) from dual
我希望你明白了。我用值 1(一)代替了您的变量 slider
。您需要将其定义为变量。您声称正在使用 SQL Developer 因此我建议您参考该产品的文档以了解如何定义变量。
或者,您可以编写一个 SQL 查询,该查询 returns 正好是 45 行(同样,45 行,因为那是您在问题中使用的示例)。我相信以下 SO 问题显示了如何实现这一目标:
SQL Query to return N rows from dual
改编该 SO 问题的答案以及您问题中的示例,我相信类似以下内容应该可行。
SELECT getWorkingDays(sysdate - (45 - LEVEL), 1)
FROM DUAL
CONNECT BY LEVEL <= 45
当然我不能真正测试它,因为我没有函数 getWorkingdays()
.
的代码
在我的项目中,我需要使用一个名为 getWorkingDay(beg_date Date,slider Integer)
的函数。此函数用于查找从日期 beg_date
开始的第 n 个最后工作日(其中 "n" 是 slider
的值)。
我想要做的是让所有工作日都在 beg_date
和 end_date
定义的日期范围内。我想使用 SELECT 语句和上面的函数来获取工作日列表。
我用 beg_date=sysdate-45
和 end_date=sysdate
尝试了这个语句:
SELECT * FROM(
SELECT getworkingDay(sysdate,slide) dt FROM DUAL
WHERE slide>0 and slide<=sysdate-(sysdate-45))
WHERE dt >=sysdate-45
我收到以下错误:
ORA-00904 : "SLIDE":invalid identifier
你能帮我找到解决这个问题的方法吗?
dual 中没有列名作为幻灯片。您需要 select 来自您的 table,其中包括 slide
列
您的函数 getWorkingDays
仅适用于一个日期。
如果你想让它在一个日期范围内工作,那么你需要在日期范围内的每一天调用一次。
使用您问题中的示例 sysdate - 45
,意味着您需要调用它 45 次,如
select getWorkingDays(sysdate - 45, 1) from dual
union
select getWorkingDays(sysdate - 44, 1) from dual
union
select getWorkingDays(sysdate - 43, 1) from dual
我希望你明白了。我用值 1(一)代替了您的变量 slider
。您需要将其定义为变量。您声称正在使用 SQL Developer 因此我建议您参考该产品的文档以了解如何定义变量。
或者,您可以编写一个 SQL 查询,该查询 returns 正好是 45 行(同样,45 行,因为那是您在问题中使用的示例)。我相信以下 SO 问题显示了如何实现这一目标:
SQL Query to return N rows from dual
改编该 SO 问题的答案以及您问题中的示例,我相信类似以下内容应该可行。
SELECT getWorkingDays(sysdate - (45 - LEVEL), 1)
FROM DUAL
CONNECT BY LEVEL <= 45
当然我不能真正测试它,因为我没有函数 getWorkingdays()
.