我正在尝试计算SQL中字符串中有多少单词。
Select ("Hello To Oracle") from dual;
我想显示单词的数量。在给定的例子中,虽然单词之间可能有多个空格,但它将是3个单词。
答案 0 :(得分:12)
你可以使用类似的东西。这将获取字符串的长度,然后在删除空格的情况下减去字符串的长度。然后添加第一个应该给你的字数:
Select length(yourCol) - length(replace(yourcol, ' ', '')) + 1 NumbofWords
from yourtable
如果您使用以下数据:
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
答案 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 /