【发布时间】:2013-07-03 20:51:46
【问题描述】:
以下工作方式的OPs request for an explanation 提出了一个我不确定的观点。
select sysdate + (interval_difference * 1440) - sysdate
from (select systimestamp - (systimestamp - 1) as interval_difference
from dual )
也就是说,加号或减号有运算符优先级吗? The documentation1列出算子顺序如下
+----------------------------+-------- ------------------------------------+ |操作员 |操作 | +-------------------------------------------------- ------------------------------------+ | +, - (作为一元运算符) |同一性、否定性、层次结构中的位置 | | , 之前, CONNECT_BY_ROOT | | +----------------------------+-------- ------------------------------------+ | *, / |乘法,除法 | +----------------------------+-------- ------------------------------------+ | +, - (作为二元运算符) |加法、减法、连接 | | , || | | +----------------------------+-------- ------------------------------------+查询一旦减少,就会变成date + interval - date。但是,interval - date 部分 is invalid。
操作是否有效是因为运算符的优先顺序将二进制加号置于二进制减号之上,或者因为 Oracle 足够聪明地知道一个操作无效而另一个无效(即它已被黑客用于日期时间/间隔算术) ?
换句话说,为什么date + interval - date 被执行为(date + interval) - date 而不是date + (interval - date)?
将 + 放在 - 之前的文档可能被解释为暗示 + 确实具有优先权,但这并不能证明任何事情,而且该操作成功的事实也可能证明某些事情,除非在任何其他方式。
手头的信息指向 + 具有优先权,但这都是间接的。这是否可以通过一种方式或另一种方式证明?
1。对于 11.2,但 10g 和 9i 文档毫无疑问是相同的
【问题讨论】:
标签: oracle operator-precedence