if(value,t,f) 如果value为true 则返回t;如果value为 false 则返回 f;
例如:SELECT if( 1= 1,'对','错')
结果:
例如:SELECT COUNT(1),t1.flag, IF(t1.flag = 'GX','广西省','其他') 省份 from (SELECT LEFT(p.op_prsn_id,2) flag from t_km_doc_edit_pus p) t1 GROUP BY t1.flag;
结果:
ifnull(value1,value2) 判断 如果value1 不是null;返回value1;如果value1 为null;返回value2;
例如:SELECT ifnull('abc','bcd'),IFNULL(null,'bcd');
结果:
CASE WHEN[BOOL] THEN [VALUE1] .....ELSE [VALUE2] END ; 判断bool ,如果为true 返回value1;如果为false 返回value2 和if(value,t,f) 效果类似:
例如:
SELECT COUNT(1),t1.flag, case when t1.flag ='gx' then '广西省' ELSE '其他' end from (SELECT LEFT(p.op_prsn_id,2) flag from t_km_doc_edit_pus p) t1 GROUP BY t1.flag;
和下面sql 效果一样:
SELECT COUNT(1),t1.flag, IF(t1.flag = 'GX','广西省','其他')from (SELECT LEFT(p.op_prsn_id,2) flag from t_km_doc_edit_pus p) t1 GROUP BY t1.flag;
结果:
case when 和 if (value,t,f)的区别是 :可以多个when:
例如:SELECT COUNT(1),t1.flag, case when t1.flag ='gx' then '广西省' when t1.flag ='km' then '全国' ELSE '其他' end from (SELECT LEFT(p.op_prsn_id,2) flag from t_km_doc_edit_pus p) t1 GROUP BY t1.flag;
结果:
CASE [expr] WHEN[contrast1] THEN [VALUE1] .....ELSE [defaultvalue] END ; 用expr 和 constrast1 对比,相等则返回 value1 ;
例如:修改后 和上面一样的效果:SELECT COUNT(1),t1.flag, case t1.flag when 'gx' then '广西省' when 'km' then '全国' ELSE '其他' end from (SELECT LEFT(p.op_prsn_id,2) flag from t_km_doc_edit_pus p) t1 GROUP BY t1.flag;
结果: