PostgreSQL中case when与position包含用法

对于复杂的业务场景,代码与SQL都可以去实现一个场景。如果用代码去实现看起来代码会冗余,不高效,不如sql的效率与简洁。

1.Case when 数据库中的if else

pgsql与mysql中case when用法几乎一致。在SQL中,“Case When”语句用于选择判断,在执行时先对条件进行判断,然后根据判断结果做出相应的操作;语法“CASE 字段 WHEN 条件1 THEN 操作1 WHEN 条件2 THEN 操作2…ELSE 操作 END;结束”。

case when类似于编程语言中的if else判断、switch case语句。该语句执行时先对条件进行判断,然后根据判断结果做出相应的操作。

Case具有两种格式:简单Case函数和Case搜索函数。

简单case函数:
case sex
when '1' then '男'
when '0' then '女'
else '其他' end;
case搜索函数
case 
when sex = '1' then '男'
when sex = '0' then '女'
else '其他' end;

显然,简单Case函数胜在简洁,但是它只适用于这种单字段的单值比较,而Case搜索函数的优点在于适用于所有比较的情况。
**注意:**还有一个需要注意的问题,Case函数在满足了某个符合条件后,剩下的条件将会被自动忽略,因此,即使满足多个条件,执行过程中也只认第一个条件。

2.POSITION()用法,相当于java中contains

postgresql中position函数提供从头查找返回第一个匹配到字符串的下标。
用法也非常简单,意思是前面的值在后面的值中包含,如果>0,则说明包含,等于0则不包含

POSITION()函数返回一个整数,该整数表示子字符串在字符串中的位置.如果在字符串中未找到子字符串,则POSITION()函数将返回零(0)。如果子字符串或字符串参数为null,则返回null。

select position('a' in 'abc')
-- 结果:1

Case when 与Position两种一起用

select 
case when position('a' in 'abc') > 0 then '包含'
else '不包含' end as name
-- 结果:包含

在复杂的场景中,可以将“abc”直接换成某一个字段,进行对比判断是否包含,输出所满足条件的值即可。

select
        a.coupon_name__c as couponName,-- 券名
        case
            when position('普卡' in a.coupon_name__c) > 0 then '普卡会员'
            when position('银卡' in a.coupon_name__c) > 0 then '银卡会员'
            when position('白金' in a.coupon_name__c) > 0 then '白金卡会员'
            when position('金卡' in a.coupon_name__c) > 0 then '金卡会员'
        else '' end as name
    from tab1
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

75888丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值