如何计算Oracle中字符串中的单词数?

时间:2012-12-23 04:02:11

标签: sql oracle oracle11g

我正在尝试计算SQL中字符串中有多少单词。

Select  ("Hello To Oracle") from dual;

我想显示单词的数量。在给定的例子中,虽然单词之间可能有多个空格,但它将是3个单词。

4 个答案:

答案 0 :(得分:12)

你可以使用类似的东西。这将获取字符串的长度,然后在删除空格的情况下减去字符串的长度。然后添加第一个应该给你的字数:

Select length(yourCol) - length(replace(yourcol, ' ', '')) + 1 NumbofWords
from yourtable

请参阅SQL Fiddle with Demo

如果您使用以下数据:

CREATE TABLE yourtable
    (yourCol varchar2(15))
;

INSERT ALL 
    INTO yourtable (yourCol)
         VALUES ('Hello To Oracle')
    INTO yourtable (yourCol)
         VALUES ('oneword')
    INTO yourtable (yourCol)
         VALUES ('two words')
SELECT * FROM dual
;

查询:

Select yourcol,
  length(yourCol) - length(replace(yourcol, ' ', '')) + 1 NumbofWords
from yourtable

结果是:

|         YOURCOL | NUMBOFWORDS |
---------------------------------
| Hello To Oracle |           3 |
|         oneword |           1 |
|       two words |           2 |

答案 1 :(得分:6)

由于您使用的是Oracle 11g,因此更简单 -

select regexp_count(your_column, '[^ ]+') from your_table

Here is a sqlfiddle demo

答案 2 :(得分:1)

如果您的要求是删除多个空格,请尝试以下方法:

Select length('500  text Oracle Parkway Redwood Shores CA') - length(REGEXP_REPLACE('500  text Oracle Parkway Redwood Shores CA',
'( ){1,}', ''))  NumbofWords
from dual;

由于我使用了dual表,您可以直接在自己的开发环境中测试它。

答案 3 :(得分:-1)

DECLARE @List       NVARCHAR(MAX) = '   ab a 
x'; /*Your column/Param*/
DECLARE @Delimiter  NVARCHAR(255) = ' ';/*space*/
DECLARE @WordsTable TABLE (Data VARCHAR(1000));

/*convert by XML the string to table*/
INSERT INTO @WordsTable(Data)
SELECT Data = y.i.value('(./text())[1]', 'VARCHAR(1000)')
FROM 
( 
SELECT x = CONVERT(XML, '<i>' 
    + REPLACE(@List, @Delimiter, '</i><i>') 
    + '</i>').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i)



/*Your total words*/
select count(*) NumberOfWords
from @WordsTable
where Data is not null;

/*words list*/
select *
from @WordsTable
where Data is not null
从这个逻辑

/ 你可以继续alon /