带大家认识下数据库中合并字段的函数,CONCAT() CONCAT_WS () GROUP_CONCAT()函数,希望对大家的工作有些许帮助!
先创建个练习表, INFROMATION
CREATE TABLE `INFORMATION` (
`ID` VARCHAR ( 255 ) NOT NULL COMMENT '主键',
`NAME` VARCHAR ( 255 ) DEFAULT NULL COMMENT '姓名',
`HOBBY` VARCHAR ( 500 ) DEFAULT NULL COMMENT '爱好',
`FLAG` INT ( 11 ) DEFAULT NULL COMMENT '有效标志',
PRIMARY KEY ( `ID` )
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '资料';
插入测试数据
INSERT INTO INFORMATION VALUES('25dwasvdascwdf8','张三','篮球',1);
INSERT INTO INFORMATION VALUES('7fawavawdgsd444','张三','乒乓球',1);
INSERT INTO INFORMATION VALUES('czbfwad8sffwdqa','李四','瑜伽',1);
INSERT INTO INFORMATION VALUES('vgyadsawadwad51','李四','王者荣耀',1);
INSERT INTO INFORMATION VALUES('wttaascawag5555','李四','看电影',1);
INSERT INTO INFORMATION VALUES('csadwafsadacwad','王五','跑步',1);
INSERT INTO INFORMATION VALUES('dwascfwawafssda','王五','看书',1);INSERT INTO INFORMATION VALUES('dawdascwadwaff','测试',null,null);
插入完后的结果(给不方便操作数据库的人观看) :
一、如何合并一条数据中的多个字段,并用自定义的符号分隔,并且有一条涉及字段值为空时,结果就为空。
数据库中有个concat函数,这个函数就是用来合并一条数据中两个不同字段的值,可以通过自定义的符号去分隔,下面是例子
SELECT CONCAT(NAME,":",HOBBY) FROM INFORMATION
这条sql的意思就是把NAME字段和自定义的“:”和HOBBY连接起来,函数中的字符根据顺序连接。
注意:该函数中的表字段如果有一个为null,则得出来的结果就为null,CONCAT_WS()函数则不是,下面会讲解到。工作时,根据实际业务选择对应函数。
这是执行后的结果:
二、如何合并一条数据中的多个字段,并用自定义的符号分隔,并且有一条涉及字段值为空时,结果只是筛除掉为空的数据,不影响其他合并字段。
接下来就要说到concat_ws函数,这个函数就是用来合并一条数据中两个不同字段的值,可以通过自定义的符号去分隔,下面是例子
SELECT CONCAT_WS(":",NAME,HOBBY) AS INFO FROM INFORMATION
这条sql的意思就是把NAME字段以自定义的“:”分隔符连接HOBBY,函数中的字符根据顺序连接,但是自定义分隔符必须放到第一个位置。
注意:该函数中的表字段中有为null的数据,则自动筛选掉,只保留不为空的数据,不影响其他字符连接操作。
这是执行后的结果:
三、如何合并多条数据中相同的字段。
最后要说的是group_concat函数,这个函数一般用在通过指定字符串分组的时候,下面是例子
SELECT GROUP_CONCAT(NAME,":",HOBBY) AS INFO FROM INFORMATION GROUP BY NAME
这条sql的意思就是把NAME字段以自定义的“:”分隔符连接HOBBY,函数中的字符根据顺序连接,但是自定义分隔符必须放到第一个位置。
注意:该函数中的只能用自带的“,”号分隔符,函数中的都是需要拼接的字段,该函数跟CONCAT函数有个相同点,就是只有拼接字段中有为null的数据,则全为null。
这是执行后的结果:
这几个函数,在工作中通常都会用到,接下来会写一篇关于如何将一条数据分隔为多条数据的功能!
以上皆为个人理解,如果哪里有不对的地方,烦请下面留言!