为什么在Oracle中接受字符串值之前的加号(+)?

时间:2015-11-24 23:20:15

标签: oracle oracle12c

好的,这可能是Oracle解析器的一个怪癖。

以下查询有效。注意最后一行的'Y'前面的+。

.absolute

为什么Oracle解析器会接受这个?我认为这是因为旧的外连接语法,但在该语法中,+被括号括起来。

这也有效:

SELECT *
  FROM (SELECT 'Y' AS field FROM DUAL
        UNION ALL
        SELECT 'X' AS field FROM DUAL) t
 WHERE t.field = +'Y'

和此:

select +'Y1' from dual;

这有效(oracle将字符串转换为数字):

select 'A' || + 'Y1' from dual;

但不是这个([错误]执行(223:9):ORA-01722:无效的数字 ):

select -'1' from DUAL;

我想知道为什么在varchar2值之前可以使用+。 Arithmetic Operators部分未提及适用于字符串值的特定规则。

1 个答案:

答案 0 :(得分:5)

一元+运算符定义为身份请参阅Table 4-1 "SQL Operator Precedence"中的About SQL Operators

此外:

select + date '2015-01-01' from dual;
  

2015年1月1日00:00:00

编辑添加。

"标识"要回归其论点。对于来自不同语言的另一个示例,请参阅Clojure的identity函数。维基百科有"identity function"的页面。