【发布时间】:2021-08-07 17:21:34
【问题描述】:
我正在尝试编写一个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 不支持数组,这是什么意思?您是否传递了一个分隔的字符串列表?您的字符串可以包含 A-z 以外的其他字符吗?你说你在计算元音和辅音的数量,但是你有一个标量函数,那么你如何在这里返回 2 个值?
-
至于如果
@ARRAY中有任何非数字字符,则错误WHILE (@ARRAY!=0)将不起作用。但是,我不知道该表达式是什么意思,因为@COUNTT和@COUNTT1在前面的语句中都被赋值为0;所以如果你检查它们的值,那么WHILE将永远不会被输入,如果你给它们分配一个大于零的值,它看起来会无限循环。 -
对不起大写我习惯于使用大写锁定在 SQL Server 中编写代码。我正在传递一个字符串列表,它不能包含 A-z 以外的其他字符。我的第一个任务是只计算元音,但它也必须计算辅音,因此以后应该编辑代码。
@COUNTT和@COUNTT1最初设置为 0,因为我打算将它们用作计数器,首先将计算元音,第二个辅音。让我知道我是否可以编写如下语法:declare @position int set @position=0 While(@position<len(@ARRAY@))? -
"我正在传递一个字符串列表,它不能包含除 Az 以外的其他字符。" 如果是字符串列表,但值不能包含字符除了 Az,你怎么知道一个字符串在哪里结束,另一个字符串从哪里开始......?示例数据和预期结果将真正帮助我们在这里为您提供帮助。另外,您使用的是什么版本的 SQL Server?
标签: function tsql if-statement switch-statement