mysql中CONCAT()函数结果为null的问题解决
作者:花花无缺
本文主要介绍了因SQL中的CONCAT()函数导致的数据漏查问题,下面就拉具体介绍一下问题的原因及解决方法,感兴趣的可以了解一下
背景 :发现数据漏更新,排查时候看代码一直没问题,因为看到在代码里用了 Optional.ofNullable(value).orElse(''),不该漏掉,后来发现在sql里面查询的时候不是用的代码里已拼好的字符串,而是用concat()又拼了一遍,所以其中任一字符串为null的数据都没查到。
在 SQL 中使用 CONCAT(str1, str2)
时,如果 str1
或 str2
为 NULL
或空串(''
)会发生什么
1、SQL 中CONCAT()函数的行为(以 MySQL 为例)
规则总结:
情况 | 结果 | 说明 |
---|---|---|
CONCAT('hello', 'world') | 'helloworld' | 正常拼接 |
CONCAT('hello', '') | 'hello' | 空串不影响 |
CONCAT('hello', NULL) | NULL | 只要有一个是 NULL,结果就是 NULL ❌ |
CONCAT(NULL, 'world') | NULL | 同上 |
CONCAT(NULL, NULL) | NULL | 同上 |
⚠️ 在标准 SQL 和 MySQL 中,CONCAT(NULL, ...) 的结果是 NULL。
2、CONCAT()的其他相关使用场景
- 模糊查询
CONCAT('%', #{device}, '%')
- 路径匹配
--判断某个字段是否“以 `prefix` 开头,并且 `prefix` 后面是 `/` 或字符串结尾 REGEXP CONCAT('^', #{prefix}, '(/|$)')
3、如何避免出现null,导致漏查漏改数据
-- 1.使用 COALESCE:将 NULL 转为空串 SELECT CONCAT(COALESCE(str1, ''), COALESCE(str2, '')) AS result FROM your_table; -- 2.使用 IFNULL:将 NULL 转为空串 SELECT CONCAT(IFNULL(str1, ''), IFNULL(str2, '')) AS result FROM your_table; -- 3.使用`CONCAT_WS(separator, str1, str2, ...)` 表示“用分隔符拼接字符串”,会自动跳过 NULL 值。 SELECT CONCAT_WS('', 'hello', NULL, 'world') AS result; -- 'helloworld'
到此这篇关于mysql中CONCAT()函数结果为null的问题解决的文章就介绍到这了,更多相关mysql中CONCAT()结果为null内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!