MySQL - 仅在不为空时连接

Posted

技术标签:

【中文标题】MySQL - 仅在不为空时连接【英文标题】:MySQL - Concat only when not empty 【发布时间】:2022-01-18 04:51:27 【问题描述】:

当我从数据库返回图像时,我试图添加指向我的图像的链接,但我不想在图像为空时添加它。我尝试了CONCATCONCAT_WS,但没有成功

这两个都不起作用:

SELECT id, name_en as name, CONCAT_WS("http://website.com/", image) as image FROM businesses

SELECT id, name_en as name, CONCAT("http://website.com/", image) as image FROM businesses

【问题讨论】:

coalesce(object,'') 必须将 null 替换为空字符串。 Coalese 采用系列中的第一个非空值。 dev.mysql.com/doc/refman/8.0/en/… 【参考方案1】:

你可以使用ÌFflowcoltrol,`判断图片是否为NULL,如果不是则添加url

SELECT id, name_en as name, IF(image IS NOT NULL, CONCAT("http://website.com/", image),"") as image 
FROM businesses

【讨论】:

这就像一个魅力。我可以添加另一个查询来支持空字符串而不仅仅是空字符串吗?。 使用image IS NOT NULL OR image <> '' 非常感谢。我刚刚检查了你的账户,你看起来在这方面做得很好。你能推荐我一本关于数据库的书吗?我觉得它很有趣,很想了解更多。提前致谢。 先看看这里的链接***.com/tags/mysql/info 有视频教程和初学者 w3school 和其他很多s和很多,但是看看这个标签或 sql 标签并阅读所问的内容和答案,他们还提供了很好的解释和流行语来查找手册也是一个很好的起点【参考方案2】:

您正在寻找的是 COALESCE() 函数:下面的文档链接。它返回系列中的第一个非空值。所以本质上我们将 Null 替换为一个空字符串。

SELECT id, name_en as name, CONCAT("http://website.com/", coalesce(image,'')) as image 
FROM businesses

https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#function_coalesce

【讨论】:

以上是关于MySQL - 仅在不为空时连接的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 仅在不为空时选择列

在 Java8 中使用 lambda 仅在不为空时过滤值

仅当表不为空时,T-SQL 才连接表

仅在选中且不为空时才显示元素

VBScript 仅在文件不为空时附加文件

Laravel 验证仅在字段不为空时验证正则表达式