欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中CONCAT()函數(shù)出現(xiàn)值為空的問題及解決辦法

 更新時(shí)間:2024年07月18日 11:02:39   作者:老周聊架構(gòu)  
項(xiàng)目中查詢用到了concat()拼接函數(shù),本文主要介紹了MySQL中CONCAT()函數(shù)出現(xiàn)值為空的問題及解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目中用到了三個(gè)字段,需要對它們用concat() 函數(shù)進(jìn)行拼接以及分組group by,下面一鍋端了concat()的這個(gè)函數(shù),有concat()、concat_ws()和 group_concat() 字段拼接的用法,我們來自己造點(diǎn)數(shù)據(jù),做個(gè)測試。

一、concat()

1、準(zhǔn)備一張test_concat

CREATE TABLE `test_concat` (
  `id` int(11) NOT NULL,
  `name` varchar(25) default NULL,
  `age` int(5) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、插入一些數(shù)據(jù)

INSERT INTO test_concat (id, NAME, age) 
VALUES
	(1, 'andy', 18),
	(1, 'bob', 20),
	(2, 'jack', 33),
	(2, NULL, 22),
	(3, 'riemann', 28),
  	(3, 'riemann', 28),
  	(1, 'bob', 20)

3、執(zhí)行sql

SELECT * FROM test_concat;

在這里插入圖片描述

SELECT CONCAT(id,name,age) FROM test_concat;

在這里插入圖片描述

出現(xiàn)了null值。。。

4、解決方式

SELECT CONCAT(id,IFNULL(name,''),age) FROM test_concat;

在這里插入圖片描述

要是name字段的值是空字符串會(huì)怎么樣呢?

繼續(xù)往下看

這時(shí)候插入的時(shí)候換成了空字符串 ' '

INSERT INTO test_concat (id, NAME, age) 
VALUES
	(1, 'andy', 18),
	(1, 'bob', 20),
	(2, 'jack', 33),
	(2, '', 22),
	(3, 'riemann', 28),
    (3, 'riemann', 28),
    (1, 'bob', 20)

在這里插入圖片描述

沒有顯示null,而是顯示一片空白。

SELECT CONCAT(id,IFNULL(name,''),age) FROM test_concat;

SELECT CONCAT(id, CASE WHEN name = '' or name is NULL THEN '' ELSE name END, age) FROM test_concat;

其實(shí)這兩種方法都可以,第二種更嚴(yán)謹(jǐn)一些。

二、concat_ws()

使用函數(shù)CONCAT_WS()。使用語法為:CONCAT_WS(separator,str1,str2,…)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。

第一個(gè)參數(shù)是其它參數(shù)的分隔符。分隔符的位置放在要連接的兩個(gè)字符串之間。分隔符可以是一個(gè)字符串,也可以是其它參數(shù)。如果分隔符為 NULL,則結(jié)果為 NULL。函數(shù)會(huì)忽略任何分隔符參數(shù)后的 NULL 值。但是CONCAT_WS()不會(huì)忽略任何空字符串。 (然而會(huì)忽略所有的 NULL)。

SELECT CONCAT_WS('-',id,name,age) FROM test_concat;

在這里插入圖片描述

直接不需要判斷為不為空,這種方式不會(huì)出現(xiàn)null值的情況!

三、group_concat()

GROUP_CONCAT([DISTINCT] expr [,expr …]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col …]]

[SEPARATOR str_val])

在 MySQL 中,你可以得到表達(dá)式結(jié)合體的連結(jié)值。通過使用 DISTINCT 可以排除重復(fù)值。如果希望對結(jié)果中的值進(jìn)行排序,可以使用 ORDER BY 子句。

SEPARATOR 是一個(gè)字符串值,它被用于插入到結(jié)果值中。缺省為一個(gè)逗號(hào) (","),可以通過指定 SEPARATOR “” 完全地移除這個(gè)分隔符。

可以通過變量 group_concat_max_len 設(shè)置一個(gè)最大的長度。在運(yùn)行時(shí)執(zhí)行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;

如果最大長度被設(shè)置,結(jié)果值被剪切到這個(gè)最大長度。如果分組的字符過長,可以對系統(tǒng)參數(shù)進(jìn)行設(shè)置:SET @@global.group_concat_max_len=40000;

使用示例:

SELECT id, GROUP_CONCAT(name) FROM test_concat WHERE id in('1', '2') GROUP BY id;

在這里插入圖片描述

SELECT id, GROUP_CONCAT(distinct name ORDER BY name DESC SEPARATOR '_') FROM test_concat WHERE id in('1', '2') GROUP BY id;

在這里插入圖片描述

SELECT id, GROUP_CONCAT(CONCAT_WS(', ',name,age) ORDER BY name DESC SEPARATOR '. ') FROM test_concat WHERE id in('1', '2') GROUP BY id;

在這里插入圖片描述

到此這篇關(guān)于MySQL中CONCAT()函數(shù)出現(xiàn)值為空的問題及解決辦法的文章就介紹到這了,更多相關(guān)MySQL CONCAT()空值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論