以下是查询,我在更换TAB并显示在一列中时遇到问题
with test as
(select 'ABC DEF GHI JKL MNO' str from dual
)
select regexp_substr (str, '[\t]+', 1, rownum) split
from test
connect by level <= length (regexp_replace (str, '[\t]+')) + 1
虽然查询在标签[^,]
的步调中用于逗号答案 0 :(得分:1)
您的查询中有几个问题:
REGEXP_SUBSTR
会返回标签而不是单词 - 您需要反转字符类length (regexp_replace (str, '[\t]+')) + 1
将返回与字符串包含制表符一样多的行;使用length(str) - length(regexp_replace(...))
代替这是一个使用[[:space:]]
匹配标签的版本(它也会匹配空格等):
with test as
(select 'ABC DEH G IJKL' str from dual
)
select str,
regexp_substr (str, '[^[:space:]]+', 1, rownum) split
from test
connect by level <= length(str) - length (regexp_replace (str, '[[:space:]]'))
rownum计算通过减去&#34;清除&#34;的长度来计算空白字符的数量。字符串从原始字符串的长度
答案 1 :(得分:0)
我使用Replace()fn得到预期的结果。问题是你必须确保你的字符串被制表符分隔而不是其他。首先,我在记事本中通过选项卡复制并分隔字符串ABC和DEF ....然后我复制并在SQL PLUS中运行查询并获得正确的输出。在记事本中复制/粘贴下面的示例以查看正确的格式。 &#39; ABC DEF ...&#39;:
之间有一个标签select REPLACE('ABC DEF GHI JKL MNO', chr(9), chr(32) ) str
from dual
/
STR
-------------------
ABC DEF GHI JKL MNO