有一个表,只有字段KK,是VARCHAR类型,里面的数据是:AA1,AA3,BA3,CD8,CD1,CA3......前面两个是字母,第三个是数字。
    如何把AA1转化成111,BC3转化成233?我的意思就是,把A转化成1,B转化成2......?

解决方案 »

  1.   

    AA1,AA3,BA3,CD8,CD1,CA3........这是一行记录的值.还是每行只有aa1或aa3...?
      

  2.   

    我只写到a到d,如果不够,你自己补充完毕.
    create table tb(KK VARCHAR(3))
    insert into tb values('AA1')
    insert into tb values('AA3')
    insert into tb values('BA3')
    insert into tb values('CD8')
    insert into tb values('CD1')
    insert into tb values('CA3')
    goupdate tb 
    set kk = 
        (case when substring(kk,1,1) = 'A' then '1' 
              when substring(kk,1,1) = 'B' then '2' 
              when substring(kk,1,1) = 'C' then '3' 
              when substring(kk,1,1) = 'D' then '4' 
        end) +
        (case when substring(kk,2,1) = 'A' then '1' 
              when substring(kk,2,1) = 'B' then '2' 
              when substring(kk,2,1) = 'C' then '3' 
              when substring(kk,2,1) = 'D' then '4' 
        end) +
        substring(kk,3,1)
     
    select * from tb
    /*
    KK   
    ---- 
    111
    113
    213
    348
    341
    313(所影响的行数为 6 行)
    */drop table tb
      

  3.   

    select 
      replace(replace(kk,'A','1'),'B','2') as kk  -- 需要的话继续套,呵呵
    from tab
      

  4.   

    其实不用每个字母转换一下的,可以直接求字母的ASC码然后直接减去64就可以了,A的ASC码为65,以此类推就可以了CREATE TABLE table1
    (
    KK VARCHAR(10) NOT NULL
    )INSERT INTO table1 
    SELECT 'AB1' UNION
    SELECT 'BC2' UNION
    SELECT 'CD3'SELECT CAST((UNICODE(LEFT(KK,1)) - 64) AS VARCHAR(10)) + CAST((UNICODE(SUBSTRING(KK,2,1)) - 64) AS VARCHAR(10)) + RIGHT(KK,1) AS Num
    FROM Table1 
    结果
    Num
    121
    232
    343
      

  5.   

    To:magician547
      其实我想要的就是你这样的方法,不过可惜我早就结账了,还是多谢你了!