是否存在一个查询,该查询将返回一列中的单词总数?我找到了一些代码,可以让我计算字符串中的单词,但无法将其应用于整个列。
我首先创建从http://www.sql-server-helper.com/functions/count-words.aspx找到的函数:
CREATE FUNCTION [dbo].[WordCount] ( @InputString VARCHAR(4000) )
RETURNS INT
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @WordCount INT
SET @Index = 1
SET @WordCount = 0
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
ELSE SUBSTRING(@InputString, @Index - 1, 1)
END
IF @PrevChar = ' ' AND @Char != ' '
SET @WordCount = @WordCount + 1
SET @Index = @Index + 1
END
RETURN @WordCount
END
GO
接下来,在字符串上对其进行测试:
DECLARE @String VARCHAR(4000)
SET @String = 'Health Insurance is an insurance against expenses incurred through illness of the insured.'
SELECT [dbo].[WordCount] ( @String )
在此示例中,它返回13。但是,我试图获取整个列的总计。例如,如果我有一列包含两行,并且每一行都包含该字符串,那么我希望它返回26以反映该列中的总单词数,而不是单个字符串。
答案 0 :(得分:5)
您可以总结此函数调用:
SELECT SUM([dbo].[WordCount]([my_column]))
FROM [my_table]
答案 1 :(得分:4)
为什么要使用WHILE
循环,因为您可以将单词数为
WITH TBL AS
(
SELECT 'One' Str
UNION
SELECT 'One Two'
UNION
SELECT 'One Two Three'
UNION
SELECT 'One Two Three Four'
)
SELECT SUM((LEN(Str) - LEN(REPLACE(Str, ' ', ''))) + 1)
FROM TBL;
--WHERE Str <> '' AND Str IS NOT NULL;
这样,您将计算该列中的所有单词。
答案 2 :(得分:0)
引荐的教程中提供了另一种word count using SQL解决方案,其中使用WHILE循环REPLACE SQL函数代替WHILE循环来确定计数。
这些SQL解决方案存在的问题或缺少的部分是,它们不考虑诸如网址之类的模式。由于网址包含“ .com”,因此总字数加1。
所有标量函数都可以应用于表的特定列的值
SELECT dbo.scalarFunction(columnName) FROM tableName
答案 3 :(得分:0)
STRING_SPLIT是SQL 2016中引入的,我将其用于计数如下(TRIM是删除字符串之前或之后的任何空格)
i = 0;
i++ = 1; // 1 or 2 ?
它将返回所有单词,现在,如果您需要消除重复的单词(例如,如果您发送要翻译的单词),则可以对值求和,也可以对DISTINCT求和。