不理解"行尾"字符

时间:2014-06-08 11:49:05

标签: oracle character oracle-sqldeveloper oracle12c

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列中的aaabbb之间出现了空格?

P.S。我在SQLDeveloper(版本4.0.2.15)

中测试它

更新

不仅replace导致该错误,此查询也是:

WITH t AS (
SELECT 'aaa
bbb' AS val FROM DUAL
)
SELECT val   ---------
from t; 

结果是:aaa bbb

如果删除评论短划线,则结果没有空格。

1 个答案:

答案 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)中运行它们时,问题不会发生。