首页 > 解决方案 > 计算数组中的元音和辅音

问题描述

我正在尝试编写一个function返回元音和辅音的数量。使用IF语句函数将成功编译,但是当我在选择中调用它时,它会显示消息:

“将 varchar 值 'MAMAMIA' 转换为数据类型 int 时转换失败。”`

我尝试使用该CASE语句,但语法错误太多,我认为这不是使用 CASE 解决问题的最佳方法......

 CREATE FUNCTION VOW_CONS(@ARRAY VARCHAR(20))
 RETURNS INT
 BEGIN

 DECLARE @COUNTT INT;
 DECLARE @COUNTT1 INT; 
 
 SET @COUNTT=0;
 SET @COUNTT1=0;

 WHILE (@ARRAY!=0)
 BEGIN
  IF(@ARRAY LIKE '[aeiouAEIOU]%') 
 
 SET @COUNTT=@COUNTT+1 

 ELSE SET @COUNTT1=@COUNTT1+1

/*
 DECLARE @C INT; 
SET @C=(CASE @SIR WHEN 'A' THEN  @COUNTT=@COUNTT+1; 
        WHEN 'E' THEN  @COUNTT=@COUNTT+1
        WHEN 'I' THEN  @COUNTT=@COUNTT+1
        WHEN 'O' THEN  @COUNTT=@COUNTT+1 
        WHEN 'U' THEN  @COUNTT=@COUNTT+1 
        WHEN 'A' THEN  @COUNTT=@COUNTT+1
        WHEN ' ' THEN ' '
   ELSE  @COUNTT1=@COUNTT1+1
   END) 
*/

 END

  RETURN @COUNTT;

END

SELECT DBO.VOW_CONS('MAMAMIA')

标签: functiontsqlif-statementswitch-statement

解决方案


在不知道您使用的是什么版本的 SQL Server 的情况下,我假设您使用的是最新版本,这意味着您可以访问TRANSLATE. 此外,我假设您确实需要访问元音辅音的数量,因此表值函数在这里似乎是更好的方法。因此,您可以执行以下操作:

CREATE FUNCTION dbo.CountVowelsAndConsonants (@String varchar(20)) 
RETURNS table
AS RETURN
    SELECT DATALENGTH(@String) - DATALENGTH(REPLACE(TRANSLATE(@String,'aeiou','|||||'),'|','')) AS Vowels, --Pipe is a character that can't be in your string
           DATALENGTH(@String) - DATALENGTH(REPLACE(TRANSLATE(@String,'bcdfghjklmnpqrstvwxyz','|||||||||||||||||||||'),'|','')) AS Consonants --Pipe is a character that can't be in your string
GO

然后你可以像这样使用这个函数:

SELECT *
FROM (VALUES('MAMAMIA'),('Knowledge is power'))V(YourString)
     CROSS APPLY dbo.CountVowelsAndConsonents(V.YourString);

推荐阅读