我们假设我有一个包含这些列的表:
DATA1 | DATA2 | DATA3
我想打印:DATA1 (DATA2)
如果DATA2不为空,则只有DATA1
如果DATA2
为空。如果我用concat做到这一点:
SELECT CONCAT(DATA1," (",COALESCE(DATA2,""),")")
我的问题是“(”和“)”总是打印出来,即使DATA2为空,所以我会得到结果:DATA1 ()
而不是DATA1
有没有办法在mysql数据库上用sql做这个?
答案 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;