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语句就不写了,如果按照我说的,你写出来是没有问题的!

原文地址:https://www.cnblogs.com/cumt-cwp/p/8514253.html