如何计算元音数量-SQL Server

时间:2018-06-26 08:22:17

标签: sql-server count procedure

我想在列中编写类似元音计数的过程。因此,如果我随时需要它,则无需再次编写该过程。我想像find_vowel();

示例:

Select Column_String 
From Tablo1 
Where Column_ID=1

结果:“我会找到它的”

Vowel:“ I,A,o,a,i,i”

该列中有6个元音(包括上下两个字符)。

那么如何在列中找到元音的数量?

我正在使用Microsoft SQL Server 2014

谢谢

3 个答案:

答案 0 :(得分:3)

将所有元音替换为空白(以删除它们),然后从原始长度中减去无元音字符串的长度:

select
    len(Column_String)
    - len(
        replace(replace(replace(replace(replace(
            lower(Column_String), 'a', ''), 'e', ''), 'i', ''), 'o', ''), 'u', '')
    ) as vowel_count
from ...

功能:

create function vowel_count(str nvarchar(1024))
returns int
as begin
    return (
      len(str) -
      len(replace(replace(replace(replace(replace(
            lower(str), 'a', ''), 'e', ''), 'i', ''), 'o', ''), 'u', ''));
end;   

答案 1 :(得分:2)

一种方法是使用函数NGrams8k将字符串分离出来,然后计算元音。

这创建了一个非常简单的功能:

CREATE FUNCTION CountVowels (@InputString varchar(8000) )
RETURNS TABLE
AS RETURN

    SELECT COUNT(1) AS Vowels
    FROM dbo.NGrams8k(@InputString,1) N
    WHERE N.token IN ('A','a','E','e','I','i','O','o','U','u');

GO

然后可以使用以下方式呼叫:

SELECT YT.Columns, CV.Vowels
FROM YourTable YT
     CROSS APPLY CountVowels(YT.YourColumn) CV;

注意,这两个函数都接受varchar(8000)(或者您可以创建等效的nvarchar(4000)。如果将参数更改为varchar(MAX)nvarchar(MAX)

答案 2 :(得分:0)

如果有理货表,这非常容易;下面的示例向您展示了如何为了代码而创建一个临时的代码。请注意,下面的示例基于不区分大小写的排序规则;如上述Larnu的回应所指出,这可能需要解决。

您可以根据需要将代码包装在函数或proc中,但是我建议您找到一种在应用程序级别进行这种字符串处理的方法。 SQL Server在处理这类事情方面变得越来越好,但是它仍然是一项昂贵的操作。

/*Create tally table; this portion is not necessary if you have one*/
SELECT N= ROW_NUMBER() OVER (ORDER BY c.name)
INTO #Tally
        FROM sys.columns c



DECLARE @str varchar(8000) = 'I Am gonna find it'

SELECT COUNT(*)
FROM #Tally N
WHERE N <= LEN(@str) AND SUBSTRING(@str,N,1) IN ('A', 'E', 'I', 'O', 'U')

/*clean up temp tally table*/
DROP TABLE #Tally