1

という列を持つテーブルがありますDescription。列にはテキストデータが入力されます。各説明の単語数を返すクエリを作成したいと思います。

私の考えは、値を取り込んで、入力されたテキストで見つかった単語の量を返す関数を作成することでした。

SELECT dbo.GetWordCount(Description) FROM TABLE

たとえば、説明が「Hello World!Have a nice day。」の場合、クエリは6を返す必要があります。

説明列の単語数を取得するにはどうすればよいですか?

4

6 に答える 6

2

この提案されたソリューションを参照してください: 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 )
于 2013-03-12T03:55:00.500 に答える
0

一般化された構文:

SELECT (LENGTH(column_name) - LENGTH(REPLACE(column_name, ' ', ''))),column_name1,column_name2 FROM table_name;

たとえば、「employeeDetails」という名前のテーブルの単一の「住所」列に含まれる単語の数を計算する場合は、次のようにします。

SELECT (LENGTH(address) - LENGTH(REPLACE(address, ' ', ''))),address,employee_name FROM employeeDetails ;
于 2017-01-05T05:57:12.977 に答える
0

Mortalusの回答に加えて、以前のバージョンの SQL Serverでは、スカラーではなく インライン関数を使用します (* 注 - この関数は SQL Server 2012 以降で機能します) 。以下を参照してください。

    /*SQL Server 2012 and up*/
    CREATE FUNCTION dbo.udf_WordCount 
    (

    @str VARCHAR(8000) 

    )
    RETURNS TABLE AS RETURN

    WITH Tally (n) AS
    (
        SELECT TOP (LEN(@str)) ROW_NUMBER()  OVER (ORDER BY (SELECT NULL)) 
        FROM (VALUES (0),(0),(0),(0),(0),(0),(0),(0)) a(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) d(n)
    )
    , BreakChar as
    (
        SELECT  SUBSTRING(@str , n , 1) [Char] , N
        FROM Tally

    )
    , Analize as 
    (
        SELECT * , lag([Char],1) OVER (ORDER BY N) PrevChar
        FROM BreakChar
    )

        SELECT WordCount = COUNT(1) + 1 
        FROM Analize
        WHERE [Char] != PrevChar
        AND PrevChar = ' ' 

使い方:

    DECLARE @str varchar(1000) = 'It''s now or never I ain''t gonna live forever'
    SELECT * FROM dbo.udf_WordCount(@str) --> 9 

**SQL Server 2008 以前:

    /*SQL Server 2008 and down*/
    CREATE FUNCTION dbo.udf_WordCount_2008 
    (
    --declare
    @str VARCHAR(8000) 
    --= 'It''s now or never I ain''t gonna live forever'
    )
    RETURNS TABLE AS RETURN

    WITH Tally (n) AS
    (
        SELECT TOP (LEN(@str)) ROW_NUMBER()  OVER (ORDER BY (SELECT NULL)) 
        FROM (VALUES (0),(0),(0),(0),(0),(0),(0),(0)) a(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) d(n)
    )
    , BreakChar as
    (
        SELECT  SUBSTRING(@str , n , 1) [Char] , N
        FROM Tally

    )
    , Analize as 
    (
        SELECT a.* , b.Char PrevChar
        FROM BreakChar a
        JOIN BreakChar b
        on a.n = b.n+1


    )

        SELECT WordCount = COUNT(1) + 1 
        FROM Analize
        WHERE [Char] != PrevChar
        AND PrevChar = ' ' 
于 2016-06-20T06:23:07.757 に答える