PostgreSQL【SQL 01】根据条件更新字段值或追加信息STRPOS(string, substring)函数使用及LIKE函数对比

1.需求说明

项目中有这样一个需求,根据条件标记数据,需要完成的内容如下:

  1. 对符合条件的数据进行标记;
  2. 无值则使用标记值;
  3. 有值则判断是否包含当前标记,包含则不处理,不包含则追加。

在这里插入图片描述

2.SQL编程

话不多说,上SQL:

UPDATE targetTableName 
SET targetField =
CASE		
		WHEN targetField IS NULL THEN #{ targetValue } 
		WHEN STRPOS ( targetField, #{ targetValue } ) = 0 THEN CONCAT ( targetField, ',', #{ targetValue } ) 
		ELSE targetField 
	END 
WHERE
	whereConditionStatement

这里进行一些说明:

  1. 为什么需要判断IS NULL
SELECT STRPOS( NULL, 'g' )
-- 结果是(Null)

如果标记字段为空,使用STRPOS函数就没有返回值,而CASE WHEN需要一个布尔值。

  1. STRPOS函数
SELECT STRPOS( 'abcdefg', 'a' ) 
-- 结果是 1
SELECT STRPOS( 'abcdefg', 'g' ) 
-- 结果是 7
SELECT STRPOS( 'abcdefg', 'h' ) 
-- 结果是 0
  1. ELSE必须要有值

这个是个坑😢如果不写ELSE语句,前两个条件不符合时,标记字段的值将被设置为null

3.总结

话说为什么不用LIKE呢?

SELECT NULL LIKE '%a%'
-- 结果也是 (Null)
SELECT 'abcdefg' LIKE '%a%'
-- 结果是 t

实际上是可以使用的,只不过要对#{targetValue}拼接%

-- 以下为MySQL语法(两种方式都是可以使用到索引的)
SELECT COUNT( 1 ) FROM dataTableName WHERE field LIKE 'str';
SELECT COUNT( 1 ) FROM dataTableName WHERE INSTR(field , '%str%') > 0;
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yuanzhengme.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值