这篇文章主要介绍了postgreSQL中的case用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
工具:postgreSQL
Navicat Premium
又一次在看代码的时候,发现了不懂的东西!
这次就是case when then
SQL CASE表达式是一种通用的条件表达式,类似于其它语言中的if/else语句。
-
CASE WHEN condition THEN result [WHEN ...] [ELSE result] END
解释:
condition是一个返回boolean的表达式。
如果为真,那么CASE表达式的结果就是符合条件的result。
如果结果为假,那么以相同方式 搜寻随后的WHEN子句。
如果没有WHEN condition为真,那么case表达式的结果就是在ELSE子句里的值。
如果省略了ELSE子句而且没有匹配的条件,结果为NULL。
select * from city;
我们的测试数据:
1 select SUM(city_id),case name 2 when '北京' then '古都' 3 when '西安' THEN '古都' 4 when '上海' THEN '魔都' 5 when 'NewYork' then '纽约' 6 else '其他城市' END 7 from city 8 GROUP BY 9 case name 10 when '北京' then '古都' 11 when '西安' THEN '古都' 12 when '上海' THEN '魔都' 13 when 'NewYork' then '纽约' 14 else '其他城市' END
结果如下:
select sum(city_id),CASE when city_id < 3 then '小于3' when city_id > 8 then '大于8' else '大于3小于8' END FROM city group by CASE when city_id < 3 then '小于3' when city_id > 8 then '大于8' else '大于3小于8' END order by CASE when city_id < 3 then '小于3' when city_id > 8 then '大于8' else '大于3小于8' END DESC 结果如下:
根据上面两个例子可以明确的看出:
第一:为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块
第二:为了在ORDER BY块中使用CASE,查询语句需要在ORDER BY块中重复SELECT 块中的 CASE 块
第三:如果要比较的数据为数字,则在case 后不能写 字段名,如果要比较的数据为字符,则要在case后写上字段名
补充:Postgresql中(case、when)的用法
1 case when
-
1 ( 2 case 3 when substr(starttime::varchar,0,5)='2020' then '2020年' 4 when substr(starttime::varchar,0,5)='2019' then '2019年' 5 when substr(starttime::varchar,0,5)='2018' then '2018年' 6 when substr(starttime::varchar,0,5)='2017' then '2017年' 7 when substr(starttime::varchar,0,5)='2016' then '2016年' 8 when substr(starttime::varchar,0,5)='2015' then '2015年' 9 when substr(starttime::varchar,0,5)='2014' then '2014年' 10 when substr(starttime::varchar,0,5)='2013' then '2013年' 11 when substr(starttime::varchar,0,5)='2012' then '2012年' 12 when substr(starttime::varchar,0,5)='2011' then '2011年' 13 when substr(starttime::varchar,0,5)='2010' then '2010年' 14 when starttime is null then '其他年份' end 15 ) AS year
2.mybatis中判断某个传参是否为空
<if test="geojsonString !=null and geojsonString !=''"> WHERE st_intersects(geom,st_geomfromgeojson(#{geojsonString})) </if>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。