8

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

Select  ("Hello To Oracle") from dual;

我想显示字数。在给定的示例中,它将是 3 个单词,尽管单词之间可能有多个空格。

4

4 回答 4

16

你可以使用类似的东西。这将获取字符串的长度,然后减去字符串的长度并删除空格。然后将第一个添加到那个应该会给你单词的数量:

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

请参阅带有演示的 SQL Fiddle

如果您使用以下数据:

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 |
于 2012-12-23T04:12:59.880 回答
8

由于您使用的是 Oracle 11g,所以它更简单-

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

这是一个 sqlfiddle 演示

于 2012-12-23T07:07:42.960 回答
0

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

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

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

于 2012-12-23T05:17:18.847 回答
-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

/从这个逻辑你可以继续/

于 2015-04-16T11:54:17.570 回答