一、踩坑sql
UPDATE `bz_order`
SET payment_code =
CASE
WHEN payment_name = 'APPPayPal' THEN
'paypal'
WHEN payment_name = 'AfterpayAfterpay' THEN
'Afterpay'
WHEN payment_name = 'worldpayCredit Card' THEN
'worldpay'
WHEN payment_name = 'APPPay in 4' THEN
'PaypalPayIn4'
WHEN payment_name = 'FREEPAYPay with Luvme Gift Card' THEN
'freepay'
END;
UPDATE `bz_order`
SET payment_name =
CASE
WHEN payment_name = 'APPPayPal' THEN
'PayPal'
WHEN payment_name = 'AfterpayAfterpay' THEN
'Afterpay'
WHEN payment_name = 'worldpayCredit Card' THEN
'Credit Card'
WHEN payment_name = 'APPPay in 4' THEN
'Pay later with paypal'
WHEN payment_name = 'FREEPAYPay with Luvme Gift Card' THEN
'Pay with Luvme Gift Card'
END;
更新的时候,如果没有匹配到的,将会置为null。而不是,没有匹配到的就不改变。
二、函数格式
CASE <单值表达式>
WHEN <condition > THEN <result>
WHEN <表达式值> THEN <SQL语句或者返回值>
...
WHEN <表达式值> THEN <SQL语句或者返回值>
ELSE <result>
END
condition 是一个返回布尔类型的表达式,如果表达式返回 true,则整个函数返回相应 result的值,如果表达式皆为 false,则返回 ElSE 后 result 的值,如果省略了 ELSE子句,则返回NULL。------上述sql就是由于省略了else出现了null数据
一、简单应用场景
CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END
CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END
CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END
相当于
CASE WHEN SCORE = 'A' THEN '优'
WHEN SCORE = 'B' THEN '良'
WHEN SCORE = 'C' THEN '中' ELSE '不及格' END
注意:then后面的数据类型要与else后面的数据类型一直。不然会报错
二、使用在select 字段查询中
力扣题目:1873
1、使用case when then ····else ·····end;进行查询
select employee_id,case when employee_id % 2 != 0 and name not like 'M%' then salary else 0 end as bonus from Employees order by employee_id
2、使用if进行查询
select employee_id,if(employee_id % 2 != 0 and name not like 'M%',salary,0 ) as bonus from Employees order by employee_id
if()用于判断是或否两种情况:
① select name,if(sex<=1,'正常','异常') from user;
② select name,if(sex<=1,sex,'异常') from user; -- if()也可以直接返回字段,case同理