使用多个案例将空格更新为null

时间:2017-08-01 14:21:09

标签: mysql

update RawAddress 
set RawAddrZip = 
  case 
  When len(RawAddrZip) <= 5 
        Then right(('00000' + RawAddrZip), 5)

  When len(RawAddrZip) > 5 and len(RawAddrZip) <= 9
         Then right(('000000000' + RawAddrZip), 9)

  When len(RawAddrZip) = 0   then  NULL
  Else 

     RawAddrZip 
  End

where  RawAddressId in (210981,210982)

更新前

RawAddreessID   RawAddressZip
210981            
210982          1234

更新后 输出将是

RawAddreessID   RawAddressZip
210981          0000 
210982          1234

我想要Null而不是0000。请更正我的sql

1 个答案:

答案 0 :(得分:0)

0也小于5。只需更改案例的顺序

case 
  When len(RawAddrZip) = 0
        Then NULL
  When len(RawAddrZip) <= 5 
        Then right(('00000' + RawAddrZip), 5)

  -- or change the condition
  When len(RawAddrZip) > 0 and len(RawAddrZip) <= 5
        Then right(('00000' + RawAddrZip), 5)

此外,您应检查隐身字符,因为如果在第一个right()上输入空字符串,则应该为您提供五个00000而不是四个0000

添加测试用例,例如:

 CASE WHEN RawAddrZip = ''    THEN 'blank'
 CASE WHEN RawAddrZip IN NULL THEN 'null'