function - 计算数组中的元音和辅音
问题描述
我正在尝试编写一个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')
解决方案
在不知道您使用的是什么版本的 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);
推荐阅读
- c++ - 关于指针成员变量的查询
- javascript - Formik Material UI React - 自动完成 - 不受控制到受控状态
- c# - Unity2D Platformer:玩家在使用 Door 之前需要一个钥匙
- java - 在 Selenium 中使用 Linktext 在浏览器之间切换
- typescript - 打字稿中具有工厂设计的通用类
- ios - 如何在iOS上完成音效处理?
- javascript - 在Javascript中动态创建的元素上添加点击事件
- laravel - Laravel 存储私有镜像访问
- python - 如何在不使用 selenium 的情况下在 python 中填写 Web 表单
- node.js - 使用 Google Firebase 函数连接到 Postgres (AWS RDS)