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

Why is the plus sign (+) before a string value accepted in Oracle?

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

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

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

为什么 Oracle 解析器接受这个?有一秒钟我认为这是因为旧的外部连接语法,但在该语法中,+ 被括号包围。

这也有效:

select +'Y1' from dual;

还有这个:

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

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

select -'1' from DUAL;

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

select -'A' from DUAL;

我想知道为什么可以在 varchar2 值之前使用 +。 Arithmetic Operators 部分没有提到适用于字符串值的具体规则。

一元+运算符定义为identityTable 4-1 "SQL Operator Precedence" in About SQL Operators.

还有:

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

January, 01 2015 00:00:00


编辑添加。

"Identity" 是对 return 的论证。对于来自不同语言的另一个示例,请参见 Clojure 的 identity function. Wikipedia has a page for "identity function".