SQL某列数据的更新及SQL的case的复杂应用及字符串截取
昨天遇到一个复杂的问题,想了一下午,终于在晚上的时候把这个问题解决了,所以记录一下,以备以后的回顾。
首先呢,数据库中有一列数据‘档位’是由主键‘条码’来判断得到的。而条码也有两种格式,即‘KPL11C20FUUA0780349’(19位)和‘C20OJ12AB01791’(14位)。编码方式中,‘KPL11C20FUUA0780349’从第二位进行提取四位,即‘PL11’;‘C20OJ12AB01791’从第四位开始提取四位,即‘OJ12’。主要是根据这四位判断得来的档位,更新进SQL。
编码规则:四位数据第一位为年份;从A(2000),B(2001)。。。。。这样得来的。
四位中第二位为月份:从A(01),B(02)。。。。。。一直到12.
剩下两位为日期。
case
when SUBSTRING(条码,4,1)='A' then '2000'
when SUBSTRING(条码,4,1)='B' then '2001'
when SUBSTRING(条码,4,1)='C' then '2002'
when SUBSTRING(条码,4,1)='D' then '2003'
when SUBSTRING(条码,4,1)='E' then '2004'
when SUBSTRING(条码,4,1)='F' then '2005'
when SUBSTRING(条码,4,1)='G' then '2006'
when SUBSTRING(条码,4,1)='H' then '2007'
when SUBSTRING(条码,4,1)='I' then '2008'
when SUBSTRING(条码,4,1)='J' then '2009'
when SUBSTRING(条码,4,1)='K' then '2010'
when SUBSTRING(条码,4,1)='L' then '2011'
when SUBSTRING(条码,4,1)='M' then '2012'
when SUBSTRING(条码,4,1)='N' then '2013'
when SUBSTRING(条码,4,1)='O' then '2014'
when SUBSTRING(条码,4,1)='P' then '2015'
when SUBSTRING(条码,4,1)='Q' then '2016'
when SUBSTRING(条码,4,1)='R' then '2017'
when SUBSTRING(条码,4,1)='S' then '2018'
when SUBSTRING(条码,4,1)='T' then '2019'
when SUBSTRING(条码,4,1)='U' then '2020'
when SUBSTRING(条码,4,1)='V' then '2021'
when SUBSTRING(条码,4,1)='W' then '2022'
when SUBSTRING(条码,4,1)='X' then '2023'
when SUBSTRING(条码,4,1)='Y' then '2024'
when SUBSTRING(条码,4,1)='Z' then '2025'
END
刚开始用了一个case语句,先做14位的条码,然而只是得到了一个年份。后来才慢慢想到用’+’来将月份拼接起来。
case
when SUBSTRING(条码,5,1)='A' then '01'
when SUBSTRING(条码,5,1)='B' then '02'
when SUBSTRING(条码,5,1)='C' then '03'
when SUBSTRING(条码,5,1)='D' then '04'
when SUBSTRING(条码,5,1)='E' then '05'
when SUBSTRING(条码,5,1)='F' then '06'
when SUBSTRING(条码,5,1)='G' then '07'
when SUBSTRING(条码,5,1)='H' then '08'
when SUBSTRING(条码,5,1)='I' then '09'
when SUBSTRING(条码,5,1)='J' then '10'
when SUBSTRING(条码,5,1)='K' then '11'
when SUBSTRING(条码,5,1)='L' then '12'
end
最后再提取日期,组合成一组年月日的日期格式。但是有两种条码啊,刚开始想用if else 这种,但是这样的话就没法直接直接生成档位信息了。还有一个判断分支,用case语句来根据时间区间判断档位信息。这里用到了case语句的多层嵌套,虽然最后的SQL语句非常长,但是得到了我想要的数据,感觉非常开心。具体的SQL语句就不写了,如果按照我说的,你写出来是没有问题的!