mysql case when update

需求是根据某个字段的值不同,修改相对应的另一个字段,于是就用到了mysql的case when,在此记录一下。隐私起见随便修改了表名和字段名。
有种简单的情况是只需要判断某个字段的值就可以确定另一个字段的值:
UPDATE mytalbe SET 
propertyA = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
END, 
propertyB = CASE id 
        WHEN 1 THEN 'aaa'
        WHEN 2 THEN 'bbb'
        WHEN 3 THEN 'ccc'
END
WHERE id IN (1,2,3);
另一种情况是要判断某个字段是否满足某个表达式,来做相应修改,我今天遇到的情况就是这样。如下:
UPDATE mytable 
SET propertyA = 
CASE 
    WHEN left(number, 1)='1' THEN 1 -- number这个varchar类型的字段开头为“1”,则设置propertyA为1
    WHEN left(number, 1)='2' THEN 2 -- number这个varchar类型的字段开头为“2”,则设置propertyA为2
    WHEN left(number, 1)='3' THEN 3 
    WHEN left(number, 1)='4' THEN 4 
    WHEN left(number, 1)='5' THEN 5 
    WHEN left(number, 1)='5' THEN 6 
    ELSE 0  
END,
propertyB = 
CASE
    WHEN CARGO_TAX_RATE in (0.17,0.13,0.11,0.06) THEN 1 -- 17%或13%或11%或6%,1
    WHEN CARGO_TAX_RATE in (0.05,0.04,0.03) THEN 2      -- 5%或4%或3%,2
    ELSE 4    -- 0% 或者其他,默认免税
END,
propertyC = 1,   -- propertyC这个属性默认为1
propertyD = 0    -- propertyD这个属性默认为0
WHERE
    EID IN (277)
AND NATURE_OF_THE_INVOICE_LINE_NEW IN (0, 4, 8)
AND BILLING_DATE >= "2017-03-01"
AND BILLING_DATE <= "2018-03-05"
AND IS_DELETE = 0
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值