如果一个字符串是由一些以空格隔开(可能是连续空格)的单词组成的,如何计算出字符串中的单词数。
例如:
字符串: ‘good luck everyone!’
可以用如下语句得到单词数:
SELECT length('good luck everyone'||' ')-length(REPLACE('good luck everyone', ' ', '')) FROM DUAL;但是如果空格是连续的空格,兄弟就不会求了。麻烦各位了。
例如求如下字符串的单词数:'good  luck   everyone'。其中good和luck之间是两个空格,luck和everyone之间是三个空格。
如何求出单词数。

解决方案 »

  1.   

    呵呵,我自己解决了。当时没弄清[:blank:]的用法。
    我的解决方法是:
    SELECT length(regexp_REPLACE('good  luck   everyone', '[ ]+', ' ')||' ')
    - length(regexp_REPLACE('good  luck   everyone', '[ ]+', ''))
    FROM DUAL;结果为:
     WORDS_CNT
    ----------
             3
    不知道有没有更简洁的方法,还请不吝赐教!
      

  2.   

    SELECT length(REGEXP_REPLACE('good    luck   everyone'||' ','( ){2,}',' '))-length(REPLACE('good luck everyone', ' ', '')) FROM DUAL;
      

  3.   

    select length(regexp_replace('  good  luck  everyone! #  ','[[:alpha:]]+','1'))-
     length(regexp_replace('  good  luck  everyone! #  ','[[:alpha:]]+')) from dual
    这样比较准确吧
    你那个要考虑空格在前在后在中间问题,还有符号问题
    replace直接对应字符可以解决这个问题