假设有一个表,id, name
6225,工行
522899,交行信用卡
955742,农行
... , ...
id表示银行卡号的前面几位数字(不定长的),id最少4位,最长是银行卡号的18位数,现在给你一张银行卡,不知道是哪个银行的,如何写一个SQL语句(oracle)输出这个银行的名字。
谢谢各位了!
oracle
6225,工行
522899,交行信用卡
955742,农行
... , ...
id表示银行卡号的前面几位数字(不定长的),id最少4位,最长是银行卡号的18位数,现在给你一张银行卡,不知道是哪个银行的,如何写一个SQL语句(oracle)输出这个银行的名字。
谢谢各位了!
oracle
反正我觉着从常识来说,这个题目有点问题,那就这样理解了,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 瑞士银行