的长度中减去"清理"字符串的长度来计算空白字符的数量。
下面是查询,我面临的问题是替换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
您的查询中有几个问题:
- 您的
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:]]'))
行数计算通过从原始字符串
我使用Replace() fn得到预期结果。问题是你必须确保你的字符串是由制表符分隔的,而不是其他的。首先,我复制并分隔字符串ABC和DEF…记事本中的by选项卡。然后我复制并运行SQL PLUS中的查询并获得正确的输出。在记事本中复制/粘贴下面的示例以查看正确的格式。'ABC DEF…'之间有一个制表符:
select REPLACE('ABC DEF GHI JKL MNO', chr(9), chr(32) ) str
from dual
/
STR
-------------------
ABC DEF GHI JKL MNO