我有这个程序,我看不到我的错误,有人吗?我想添加一些文字并只打印人声。
create procedure sacaVocales
@vocales varchar(20)
as
begin
declare @repeticiones int = len(@vocales)
declare @contador int = 1
declare @resultado varchar(20)
declare @dato varchar(1)
while @contador<=@repeticiones
begin
select @dato = SUBSTRING(@vocales, @contador, @contador+ 1)
case @dato
when 'a' then @resultado = @resultado + @dato
when 'e' then @resultado = @resultado + @dato
when 'i' then @resultado = @resultado + @dato
when 'o' then @resultado = @resultado + @dato
when 'u' then @resultado = @resultado + @dato
set @contador = @contador + 1
end
print @resultado
end
我的错误接近“案例”
答案 0 :(得分:1)
收集元音的另一种方法:
declare @Vocales as VarChar(20) = 'vocales';
declare @Repeticiones as Int = Len( @Vocales );
declare @Contador as Int = 1;
declare @Resultado as VarChar(20) = '';
declare @Dato as VarChar(1);
while @Contador <= @Repeticiones
begin
set @Dato = Substring( @Vocales, @Contador, @Contador + 1 );
if @Dato in ( 'a', 'e', 'i', 'o', 'u' )
set @Resultado += @Dato;
set @Contador += 1;
end;
print @Resultado;
答案 1 :(得分:0)
夫妻俩。
正如VKP的评论中所提到的,你不能从同一个查询中的CASE语句中提取,为了解决这个问题,你可以为CASE语句创建一个额外的SELECT
其次,使用CASE时,在那之后不需要等号(=)。 “那么”基本上是等号,所以只需将你想要的值相等。
如果您尝试此操作,查询会成功运行:
DECLARE @vocales VARCHAR(20) = 'vocales'
declare @repeticiones int = len(@vocales)
declare @contador int = 1
declare @resultado varchar(20)
declare @dato varchar(1)
while @contador<=@repeticiones
begin
select @dato = SUBSTRING(@vocales, @contador, @contador+1)
SELECT
case @dato
when 'a' then @resultado + @dato
when 'e' then @resultado + @dato
when 'i' then @resultado + @dato
when 'o' then @resultado + @dato
when 'u' then @resultado + @dato
END
set @contador = @contador + 1
end
print @resultado
但是,因为它目前只是提供了一些NULL值,它们等于@vocales值的长度。这是因为从未声明参数@resultado的值,并且在CASE语句中,您将NULL值添加到已知值,该值始终等于NULL。
让我知道您要查找的输出,我可以修改我的查询以帮助您实现目标。