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
之间的空格从哪里出现?
附注我在 SQLDeveloper(版本 4.0.2.15)中对此进行了测试
更新
不仅 replace
会导致该错误,此查询还会:
WITH t AS (
SELECT 'aaa
bbb' AS val FROM DUAL
)
SELECT val ---------
from t;
结果是:aaa bbb
如果删除注释破折号,结果将没有空格。
最佳答案
看起来这可能是一个错误。我在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)中运行这些时,问题不会发生。
关于oracle - 不理解 "end of line"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24105824/