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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 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;
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
16天前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
2月前
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
2月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
2月前
|
SQL 存储 Serverless
SQL语句拆分时间字段的技巧与方法
在数据库操作中,经常需要处理时间数据
|
2月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
2月前
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
|
2月前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
2月前
|
SQL Oracle 关系型数据库
SQL如何添加字段记录:详细步骤与技巧
在数据库管理中,经常需要向已有的表中添加新的字段(列)或向表中插入新的记录
|
3月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
35 1
|
2月前
|
SQL 关系型数据库 MySQL
SQL日期函数
SQL日期函数