只有在条件有效时才会选择MySQL concat

时间:2015-01-24 13:22:48

标签: mysql sql concat

我们假设我有一个包含这些列的表:

DATA1 | DATA2 | DATA3

我想打印:DATA1 (DATA2)如果DATA2不为空,则只有DATA1如果DATA2为空。如果我用concat做到这一点:

SELECT CONCAT(DATA1," (",COALESCE(DATA2,""),")")

我的问题是“(”和“)”总是打印出来,即使DATA2为空,所以我会得到结果:DATA1 ()而不是DATA1

有没有办法在mysql数据库上用sql做这个?

4 个答案:

答案 0 :(得分:4)

你已经得到了一半的答案。如果任何值为null,CONCAT将产生NULL。您正在使用COALESCE,因此如果DATA2,则您的整个结果都不为空,因此只需包含"()"在coalesce里面。

试试这个

SELECT CONCAT(
              DATA1,
              COALESCE(
                         CONCAT(" (",DATA2,")")
                       ,"")
              )

答案 1 :(得分:1)

您可以使用简单的CASE:

SELECT CONCAT( DATA1, CASE WHEN DATA2 IS NULL THEN "" ELSE CONCAT( "( ", DATA2, " )" ) END ) 
FROM sometable;

答案 2 :(得分:0)

您可以使用UNION语句合并两个结果集。第一个结果集将获取DATA2为空的数据,而在其他结果集中,DATA2将为null。

答案 3 :(得分:0)

尝试

SELECT IF(DATA2 IS NOT NULL, CONCAT(DATA1, ' (', DATA2, ')'), DATA1) AS data;