Given Letter, Get Next Letter in Alphabet

后端 未结 5 536
天涯浪人
天涯浪人 2021-01-17 19:18

I have letter \"a\", \"b\", \"c\". I would like my results to be \"b\", \"c\", \"d\" in TSQL respectively. Would what I use to achieve this?

5条回答
  •  旧时难觅i
    2021-01-17 19:48

    3 letters alfabetic counter with two SQL procedures

    (a, b...z, aa, ab...zy, zz, aaa...zzz):

    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO
    
    alter procedure letraMas
    @letraEntra as char( 1),
    @letraSale as char( 1) OUTPUT,
    @seLleva as bit  OUTPUT
    
    as
    
    --set @letraEntra = 'w'
    --set @letraSale = 'm'
    set @seLleva = 0
    
    select
    @letraSale = CASE
            WHEN @letraEntra = '' or (@letraEntra is null) or @letraEntra = 'z'
            THEN 'a'
        WHEN @letraEntra < 'z'
            THEN CHAR (ASCII( @letraEntra) + 1)
    end
    
    if @letraEntra = 'z' set @seLleva = 1
    
    return
    

    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO
    
    /* USO:
    declare
    @tareaEntra as char(3),
    @tareaSale as char(3)
    set @tareaEntra = 'xzz'
           EXEC tareaMas @tareaEntra, @tareaSale OUTPUT
    */
    alter procedure tareaMas
    @tareaEntra as char( 3),
    @tareaSale as char( 3) OUTPUT
    
    as
    declare @charU as char(1 )     -- char de U_nidades albabéticas
    declare @charD as char(1 )     -- char de D_ecenas albabéticas
    declare @charC as char(1 )     -- char de C_entenas albabéticas
    declare @letraSale as char(1 )        -- char de C_entenas albabéticas
    declare @seLleva as bit
    
    set @tareaEntra   = right('   ' + rtrim (@tareaEntra), 3)
    
    set @charU = substring(@tareaEntra , 3, 1)
    set @charD = substring(@tareaEntra , 2, 1)
    set @charC = substring(@tareaEntra , 1, 1)
    
    EXEC letraMas @charU, @letraSale OUTPUT, @seLleva OUTPUT
    set @charU = @letraSale
    if @seLleva = 1
    BEGIN
            EXEC letraMas @charD, @letraSale OUTPUT, @seLleva OUTPUT
            set @charD = @letraSale
            if @seLleva = 1
            BEGIN
                   EXEC letraMas @charC, @letraSale OUTPUT, @seLleva OUTPUT
                   set @charC = @letraSale
            END
    END
    
    set @tareaSale = ltrim(@charC + @charD + @charU)
    return
    

提交回复
热议问题