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

cos*_*sta 5 oracle oracle12c

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

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

SELECT *
  FROM (SELECT 'Y' AS field FROM DUAL
        UNION ALL
        SELECT 'X' AS field FROM DUAL) t
 WHERE t.field = +'Y'
Run Code Online (Sandbox Code Playgroud)

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

这也有效:

select +'Y1' from dual;
Run Code Online (Sandbox Code Playgroud)

还有这个:

select 'A' || + 'Y1' from dual;
Run Code Online (Sandbox Code Playgroud)

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

select -'1' from DUAL;
Run Code Online (Sandbox Code Playgroud)

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

select -'A' from DUAL;
Run Code Online (Sandbox Code Playgroud)

我想知道为什么在varchar2值之前可以使用+.该算术运算符节没有提到将适用于字符串值的具体规则.

Sha*_*nce 5

一元+操作定义为身份表4-1"SQL运算符优先级"关于SQL操作符.

也:

select + date '2015-01-01' from dual;
Run Code Online (Sandbox Code Playgroud)

2015年1月1日00:00:00


编辑添加.

"身份"是为了回归其论点.有关另一种语言的另一个例子,请参阅Clojure的identity功能.维基百科有一个"身份功能"页面.