mysql中CONCAT()函數(shù)結(jié)果為null的問(wèn)題解決
背景 :發(fā)現(xiàn)數(shù)據(jù)漏更新,排查時(shí)候看代碼一直沒(méi)問(wèn)題,因?yàn)榭吹皆诖a里用了 Optional.ofNullable(value).orElse(''),不該漏掉,后來(lái)發(fā)現(xiàn)在sql里面查詢的時(shí)候不是用的代碼里已拼好的字符串,而是用concat()又拼了一遍,所以其中任一字符串為null的數(shù)據(jù)都沒(méi)查到。
在 SQL 中使用 CONCAT(str1, str2) 時(shí),如果 str1 或 str2 為 NULL 或空串('')會(huì)發(fā)生什么
1、SQL 中CONCAT()函數(shù)的行為(以 MySQL 為例)
規(guī)則總結(jié):
| 情況 | 結(jié)果 | 說(shuō)明 |
|---|---|---|
| CONCAT('hello', 'world') | 'helloworld' | 正常拼接 |
| CONCAT('hello', '') | 'hello' | 空串不影響 |
| CONCAT('hello', NULL) | NULL | 只要有一個(gè)是 NULL,結(jié)果就是 NULL ? |
| CONCAT(NULL, 'world') | NULL | 同上 |
| CONCAT(NULL, NULL) | NULL | 同上 |
?? 在標(biāo)準(zhǔn) SQL 和 MySQL 中,CONCAT(NULL, ...) 的結(jié)果是 NULL。
2、CONCAT()的其他相關(guān)使用場(chǎng)景
- 模糊查詢
CONCAT('%', #{device}, '%')
- 路徑匹配
--判斷某個(gè)字段是否“以 `prefix` 開(kāi)頭,并且 `prefix` 后面是 `/` 或字符串結(jié)尾
REGEXP CONCAT('^', #{prefix}, '(/|$)')
3、如何避免出現(xiàn)null,導(dǎo)致漏查漏改數(shù)據(jù)
-- 1.使用 COALESCE:將 NULL 轉(zhuǎn)為空串
SELECT CONCAT(COALESCE(str1, ''), COALESCE(str2, '')) AS result
FROM your_table;
-- 2.使用 IFNULL:將 NULL 轉(zhuǎn)為空串
SELECT CONCAT(IFNULL(str1, ''), IFNULL(str2, '')) AS result
FROM your_table;
-- 3.使用`CONCAT_WS(separator, str1, str2, ...)` 表示“用分隔符拼接字符串”,會(huì)自動(dòng)跳過(guò) NULL 值。
SELECT CONCAT_WS('', 'hello', NULL, 'world') AS result; -- 'helloworld'
到此這篇關(guān)于mysql中CONCAT()函數(shù)結(jié)果為null的問(wèn)題解決的文章就介紹到這了,更多相關(guān)mysql中CONCAT()結(jié)果為null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql占用過(guò)高CPU時(shí)的優(yōu)化手段(必看)
下面小編就為大家?guī)?lái)一篇Mysql占用過(guò)高CPU時(shí)的優(yōu)化手段(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
sql中替換函數(shù)replace()用法與實(shí)例總結(jié)
這篇文章主要給大家介紹了關(guān)于sql中替換函數(shù)replace()用法與實(shí)例的相關(guān)資料,在SQL中REPLACE函數(shù)用于替換一個(gè)字符串中的一部分為另一個(gè)字符串,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
MySQL索引失效的八大常見(jiàn)場(chǎng)景及解決方法
作為一名Java開(kāi)發(fā)工程師,在處理高并發(fā)業(yè)務(wù)時(shí),MySQL索引失效是導(dǎo)致系統(tǒng)性能下降的"隱形殺手",本文將結(jié)合實(shí)際案例,深度剖析索引失效的8大常見(jiàn)場(chǎng)景,并提供Java代碼層面的優(yōu)化建議,幫助開(kāi)發(fā)者避開(kāi)性能陷阱,需要的朋友可以參考下2025-05-05
為mysql數(shù)據(jù)庫(kù)添加添加事務(wù)處理的方法
開(kāi)始首先說(shuō)明一下,mysql數(shù)據(jù)庫(kù)默認(rèn)的數(shù)據(jù)庫(kù)引擎是MyISAM,是不支持事務(wù)的,單數(shù)如果你添加了數(shù)據(jù)執(zhí)行語(yǔ)句是不會(huì)出錯(cuò)的,單數(shù)不管用,即便是回滾事務(wù),記錄也是插入進(jìn)去了,所有首先我們要做的第一步是更改數(shù)據(jù)庫(kù)引擎2011-07-07
MySQL 字符串拆分實(shí)例(無(wú)分隔符的字符串截取)
這篇文章主要介紹了MySQL 字符串拆分實(shí)例(無(wú)分隔符的字符串截取),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
MySQL如何開(kāi)啟遠(yuǎn)程連接權(quán)限
這篇文章主要介紹了MySQL如何開(kāi)啟遠(yuǎn)程連接權(quán)限問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
Mysql 5.7.18 解壓版下載安裝及啟動(dòng)mysql服務(wù)的圖文詳解
這篇文章主要介紹了Mysql 5.7.18 解壓版下載安裝及啟動(dòng)mysql服務(wù)的圖文詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05

