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
答案 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'