SQL字符串:计算字符串中的单词

时间:2017-01-31 07:48:48

标签: sql-server string

我在这里搜索了很多问题,但我找到的所有答案都是针对不同的语言,如Javascript等。

我在SQL中有一个简单的任务,我似乎无法找到一个简单的方法。 我只需要计算"字数"在一个SQL字符串(一个句子)里面。你可以看到为什么"单词"在我的例子中引用。 "单词"被白色空间划分。

例句:

$.extend( object1, object2 );

期望的答案:

1. I am not your father.
2. Where are your brother,sister,mother?
3. Where are your brother, sister and mother?
4. Who are     you?

正如你所看到的,我需要计算"单词"无视符号(我必须将它们视为单词的一部分)。所以样品没有。 2: 1. 5 2. 4 3. 7 4. 3

我可以通过这样的替换来处理多个空格:
(1)Where (2)are (3)your (4)brother,sister,mother? = 4

我可以用什么SQL函数来执行此操作?我使用的是SQL Server 2012,但需要一个在SQL Server 2008中运行的功能。

3 个答案:

答案 0 :(得分:7)

这是一种方法:

创建并填充样本表(保存是您未来问题中的此步骤)

DECLARE @T AS TABLE
(
    id int identity(1,1),
    string varchar(100)
)

INSERT INTO @T VALUES
('I am not your father.'),
('Where are your brother,sister,mother?'),
('Where are your brother, sister and mother?'),
('Who are     you?')

使用cte将多个空格替换为单个空格(感谢Gordon Linoff的答案here

;WITH CTE AS
(
SELECT  Id,
        REPLACE(REPLACE(REPLACE(string, ' ', '><' -- Note that there are 2 spaces here
                               ), '<>', ''
                       ), '><', ' '
                ) as string
FROM @T
)

查询CTE - 字符串的长度 - 不带空格的字符串的长度+ 1:

SELECT id, LEN(string) - LEN(REPLACE(string, ' ', '')) + 1 as CountWords
FROM CTE 

结果:

id  CountWords
1   5
2   4
3   7
4   3

答案 1 :(得分:1)

这是@ ZoharPeled的答案的一个小改进。这也可以处理0个长度值:

DECLARE @t AS TABLE(id int identity(1,1), string varchar(100))

INSERT INTO @t VALUES
  ('I am not your father.'),
  ('Where are your brother,sister,mother?'),
  ('Where are your brother, sister and mother?'),
  ('Who are     you?'),
  ('')

;WITH CTE AS
(
  SELECT
    Id,
    REPLACE(REPLACE(string,' ', '><'), '<>', '') string
  FROM @t
)
SELECT 
  id,
  LEN(' '+string)-LEN(REPLACE(string, '><', ' ')) CountWords
FROM CTE

答案 2 :(得分:1)

要处理多个空格,请使用此处显示的方法

Declare @s varchar(100)
set @s='Who are     you?'
set @s=ltrim(rtrim(@s))

while charindex('  ',@s)&gt;0
Begin
    set @s=replace(@s,'  ',' ')
end

select len(@s)-len(replace(@s,' ',''))+1 as word_count

https://exploresql.com/2018/07/31/how-to-count-number-of-words-in-a-sentence/