好吧,这可能是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部分未提及适用于字符串值的特定规则 .
1 回答
一元
+
运算符定义为标识请参见About SQL Operators中的Table 4-1 "SQL Operator Precedence" .也:
编辑添加 .
"Identity"正在返回其论点 . 有关另一种语言的另一个例子,请参阅Clojure的identity函数 . 维基百科有一个页面"identity function" .