假设有一个表,id, name
                    6225,工行
                    522899,交行信用卡
                    955742,农行
                           ...   , ...
id表示银行卡号的前面几位数字(不定长的),id最少4位,最长是银行卡号的18位数,现在给你一张银行卡,不知道是哪个银行的,如何写一个SQL语句(oracle)输出这个银行的名字。
谢谢各位了!
oracle

解决方案 »

  1.   

    SELECT NAME FROM 你的表 WHERE 你的表.ID LIKE SUBSTR('给的18位银行卡号',1,4)||'%'
      

  2.   


    反正我觉着从常识来说,这个题目有点问题,那就这样理解了,ID最短是4位,最长是18位,那就优先匹配长度最长的那个ID,如果能够匹配上的话,则返回,如果匹配不上,则去找更短的那个ID,如下:WITH T AS(
    SELECT 6225 AS ID,'工商银行' AS NAME FROM DUAL UNION ALL
    SELECT 62251 AS ID,'农业银行' AS NAME FROM DUAL UNION ALL
    SELECT 622512 AS ID,'建设银行' AS NAME FROM DUAL UNION ALL
    SELECT 6225123 AS ID,'民生银行' AS NAME FROM DUAL UNION ALL
    SELECT 62251234 AS ID,'邮政银行' AS NAME FROM DUAL UNION ALL
    SELECT 622512345 AS ID,'瑞士银行' AS NAME FROM DUAL
    )
    SELECT ID,NAME FROM T WHERE T.ID IN(
        SELECT MAX(ID) FROM T WHERE '62251234567890' LIKE ID||'%'
    );结果ID NAME
    622512345 瑞士银行
      

  3.   

    你得有个银行的id和银行的名称对应的码表,然后用事实表和码表通过id进行关联后取姓名