WITH t AS (
SELECT 'aaa
bbb' AS val FROM DUAL
)
SELECT val from t
此查询的结果是:
VAL
-----
aaabbb
对我来说很清楚。
但是这个:
WITH t AS (
SELECT 'aaa
bbb' AS val FROM DUAL
)
SELECT val, replace(val, 'a', '-') AS replace from t;
返回:
VAL |REPLACE
---------------------
aaa bbb| ---bbb
问题:在第二个示例中,VAL列中的aaa
和bbb
之间出现了空格?
P.S。我在SQLDeveloper(版本4.0.2.15)
中测试它更新
不仅replace
导致该错误,此查询也是:
WITH t AS (
SELECT 'aaa
bbb' AS val FROM DUAL
)
SELECT val ---------
from t;
结果是:aaa bbb
如果删除评论短划线,则结果没有空格。
答案 0 :(得分:2)
看起来它可能是一个错误。我在11.2.0.2.0中复制了它。对replace
的调用似乎会对插入空格字符的val
的值产生某种副作用:
WITH t AS (
SELECT 'aaa
bbb' AS val FROM DUAL
)
SELECT val, dump(val) from t;
"aaabbb" Typ=96 Len=7: 97,97,97,10,98,98,98
WITH t AS (
SELECT 'aaa
bbb' AS val FROM DUAL
)
SELECT val, replace(val, 'a', '-'), dump(val) AS replace from t;
"aaa bbb" "--- bbb" Typ=96 Len=8: 97,97,97,32,10,98,98,98
请注意,换行符的原始值为val
。在调用replace
的查询中,可能存在导致val
的值以某种方式转换导致插入空间的错误。
编辑:根据jonearles的评论,这似乎是SQL Developer 4.0中的一个错误。当我在另一个工具(例如Apex)中运行它们时,问题不会发生。