怎么了? SQL案例

时间:2016-01-17 18:03:03

标签: sql-server tsql case procedure

我有这个程序,我看不到我的错误,有人吗?我想添加一些文字并只打印人声。

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

我的错误接近“案例”

2 个答案:

答案 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。

让我知道您要查找的输出,我可以修改我的查询以帮助您实现目标。