如果一个字符串是由一些以空格隔开(可能是连续空格)或者其他非字母的字符的单词组成的,如何计算出字符串中的单词数。
例如:
字符串: 'good luck everyone'
可以用如下语句得到单词数:
SELECT length('good luck everyone'||' ')-length(REPLACE('good luck everyone', ' ', '')) FROM DUAL;
如果空格是连续的空格
例如:
字符串:'good luck everyone'。其中good和luck之间是两个空格,luck和everyone之间是三个空格。
提供三个方法():
1.
SELECT length(regexp_REPLACE('good luck everyone', '[ ]+', ' ')||' ')
- length(regexp_REPLACE('good luck everyone', '[ ]+', '')) AS words_cnt
FROM DUAL;
2.
SELECT length(REGEXP_REPLACE('good luck everyone'||' ','( ){1,}',' '))
- length(REPLACE('good luck everyone', ' ', '')) AS words_cnt
FROM DUAL;
3.
SELECT length(regexp_replace(' good luck everyone! # ','[[:alpha:]]+','a'))
- length(regexp_replace(' good luck everyone! # ','[[:alpha:]]+')) AS words_cnt
FROM DUAL;
其中:
1和2的方法思路是一样的,但利用的策略稍微不一样;
3方法可以完成以非字母的字符隔开的单词的计数,例如3中的‘!#’。