就是一个函数,传B,得到A
传C,得到B
传Z,得到Y怎么实现最简单呢,我现在是一个一个判断的,很多个if语句

解决方案 »

  1.   

    使用ascii得到字符序号
    select ascii('a') value from dual
    然后减一得到字符
    select chr(97) value from dual组合起来即可.
    select chr(ascii('a') - 1) value from dual
      

  2.   

    select chr(ascii('b') - 1) "value" from dual
    /*
    v
    -
    a1 row selected.
    */select chr(ascii('c') - 1) "value" from dual
    /*
    v
    -
    b1 row selected.
    */select chr(ascii('z') - 1) "value" from dual
    /*
    v
    -
    y1 row selected.
    */
      

  3.   

    如果传为A-->前面没字母时怎么显示
      

  4.   

    查看范围 select ascii('a'), ascii('z'), ascii('A'), ascii('Z') from dual;/**
        ASCII('A') ASCII('Z') ASCII('A') ASCII('Z')
    1 97 122 65 90**/select chr(97), chr(122), chr(65), chr(90) from dual;
    /**    CHR(97) CHR(122) CHR(65) CHR(90)
    1 a z A Z**/
      

  5.   

    A前面还有其它的比如小写的z或者数字,具体就是ascii比它小一的那个
      

  6.   

    create or replace function f_change_alph (v_str in varchar2)  return varchar2 isv_ret varchar2(2);
    begin
       select translate(v_str,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','BCDEFGHIJKLMNOPQRSTUVWXYZA') into v_ret from  dual;
      return v_ret;
    end f_change_alph;
    --test
    select f_change_alph('Z') res from  dual;
    A
      

  7.   


    --将b当作参数传入
    select decode('b','a','z',chr(ascii('b')-1)) as vaule from dual
      

  8.   

    函数表示create or replace function getval
    (val1 varchar)
    return varchar2
    as
    v_result varchar2;
    begin
    v_result:=(select decode(val1,'a','z',chr(ascii(val1)-1)) from dual);
    return v_result;
    end;
      

  9.   

    可以使用TRANSLATE()函数,轻松实现。
    参考代码:
    SELECT TRANSLATE(原始字符串, 'bcdefghijklmnopqrstuvwxyzaBCDEFGHIJKLMNOPQRSTUVWXYZA',
                                  'abcdefghijklmnopqrstuvwxyzaABCDEFGHIJKLMNOPQRSTUVWXYZ');