为什么 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 部分没有提到适用于字符串值的具体规则。
一元+
运算符定义为identity见Table 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".
好的,这可能是 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 部分没有提到适用于字符串值的具体规则。
一元+
运算符定义为identity见Table 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".