【发布时间】:2014-10-15 19:42:01
【问题描述】:
在我的 SQL 脚本中创建日期范围时遇到问题。
我创建了一个日期范围表('dt' 表),它可以作为独立脚本运行,但是当添加到以下脚本时,它只显示 trunc(rl.daudate) = dt.dateval 的日期。即使与 trunc(rl.duedate) 不匹配,我也需要显示 dt.dateval
select dt.dateval, rl.reservation_no, gr.title, gr.catnr, rl.duedate, rl.work_center_no, rl.tec_criteria, rl.qty
from gps_reservation gr, GPS_RESERVATION_LOAD rl,
(select x.dateval from
(select (trunc(sysdate+90) - rownum) -1 dateval from dual
connect by rownum < (1*90) ) x ) dt
where rl.reservation_no = gr.reservation_no
and rl.plant = 'W'
and gr.active_flag = 'Y'
and gr.cap_flag = 'Y'
and trunc(rl.duedate) = dt.dateval
我通常会使用 (+) 连接,即
and trunc(rl.duedate) (+) = dt.dateval
...但是,我收到“ORA-00936:缺少表达式:-936”错误?
有什么想法吗? 非常感谢
【问题讨论】:
-
停止使用古老的语法 ANSI 92 已经有 22 年的历史了,所以早于日期的语法必须被认为是古老的。使用 ANSI 语法而不是 (+)
-
我不知道没有 (+) 语法的另一种加入方式。我是使用旧报告中的现有代码自学的,除了 (+) 之外,我从未使用过任何其他代码。
-
好的,但是你已经严重过时了;试试这个视觉指南加入codeproject.com/Articles/33052/…
-
试试这个:trunc(rl.duedate (+))。但正如@Used_By_Already 已经告知的那样,最好使用ANSI 语法。也许这有帮助:oratechinfo.co.uk/ansi_joins.html
-
关于新语法的 2 个提示。 1,不再在 from 子句中使用逗号; 2,序列确实很重要,您不能加入尚未加入的表。这就是为什么我在下面的 from 子句中更改了表顺序。