使用Sequelize拼接字段时如何判断列是否为空,避免输出多余逗号
解决方案
你遇到的逗号冗余问题是因为原生CONCAT函数不会自动跳过NULL值,字段为NULL时对应的分隔符会被保留输出,推荐两种可行方案:
方案1:使用CONCAT_WS函数(推荐)
CONCAT_WS是SQL原生支持的带分隔符拼接函数,第一个参数为统一分隔符,后续参数为待拼接字段,会自动跳过所有值为NULL的字段,不会生成多余分隔符。
修改后的代码如下:
{ model: info, as: "info", attributes: [ [ Sequelize.fn('CONCAT_WS', ', ', // 统一指定分隔符 Sequelize.col('country'), Sequelize.col('city'), Sequelize.col('street'), Sequelize.col('phone') ), 'address' ] ] }
如果需要同时跳过值为空字符串的字段,可以给每个字段套一层NULLIF,将空字符串转为NULL处理:
Sequelize.fn('CONCAT_WS', ', ', Sequelize.fn('NULLIF', Sequelize.col('country'), ''), Sequelize.fn('NULLIF', Sequelize.col('city'), ''), Sequelize.fn('NULLIF', Sequelize.col('street'), ''), Sequelize.fn('NULLIF', Sequelize.col('phone'), '') )
方案2:条件判断拼接(兼容不支持CONCAT_WS的场景)
如果你的使用场景不支持CONCAT_WS,可以通过IF判断仅在字段非空时拼接分隔符和字段内容:
{ model: info, as: "info", attributes: [ [ Sequelize.fn('CONCAT', Sequelize.col('country'), Sequelize.literal(`IF(city IS NOT NULL, CONCAT(', ', city), '')`), Sequelize.literal(`IF(street IS NOT NULL, CONCAT(', ', street), '')`), Sequelize.literal(`IF(phone IS NOT NULL, CONCAT(', ', phone), '')`) ), 'address' ] ] }
内容的提问来源于stack exchange,提问作者farzanmanafi
相关产品推荐
相关产品推荐

