架构看起来像
CREATE TABLE `test` (
`id` INT,
`countryCode` VARCHAR(50),
`state` VARCHAR(50)
) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COLLATE = UTF8MB4_0900_AI_CI;
数据看起来像
insert into `test` values
(1,'AE','AE'),
(2,'SA','SA'),
(3,NULL,'SA') ;
我们正在使用下面的查询来生成最终将被转储到数据文件中的数据
SELECT ('id|countryCode|state|') AS `line`
UNION ALL SELECT
CONCAT(CONCAT(`id`, '|'),
CONCAT(`countryCode`, '|'),
CONCAT(`state`, '|')) AS `line`
FROM
`test`;
因此,这里的问题是,如果记录为空,则在这种情况下,id 3的国家/地区代码为空,查询会将行视为空。目前的输出是
id|countryCode|state|
1|AE|AE|
2|SA|SA|
*null*
我应该怎么做才能使查询返回返回的数据,而不是返回整行为null的数据。
所需的输出是
id|countryCode|state|
1|AE|AE|
2|SA|SA|
3||SA
CONCAT()
NULL
如果其任何参数为,则返回NULL
。
我建议您CONCAT_WS()
改用withCOALESCE()
作为可能的列NULL
:
SELECT 'id|countryCode|state|' AS `line`
UNION ALL
SELECT CONCAT_WS('|', `id`, COALESCE(`countryCode`, ''), COALESCE(`state`, '')) AS `line`
FROM `test`;
参见演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句