oracle - 不理解 "end of line"字符

标签 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 之间的空格从哪里出现?

附注我在 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/

相关文章:

c# - 带有汉字的 PDFSharp

java - 从二维数组返回字符元素

C# NHibernate 和 Oracle 托管客户端

c# - 使用 ASP .Net Core 连接到 Oracle 数据库

oracle - 多列的唯一约束

php - Javascript 和 PHP 中的字符编码是否不同?

sql - 无法添加外键,因为需要唯一约束

mysql - 使用内连接或交叉连接组合 2 个 SQL 查询?

SQL 如何按日期范围分组

包定义中的 Oracle 用户定义类型