【问题标题】:MySQL concat select only if condition is validMySQL concat 仅在条件有效时才选择
【发布时间】:2015-03-23 10:28:43
【问题描述】:

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

DATA1 | DATA2 | DATA3

我想打印:DATA1 (DATA2) 如果 DATA2 不为空,只有 DATA1 如果 DATA2 为空。如果我用 concat 来做:

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

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

有没有办法在mysql数据库上使用sql来做到这一点?

【问题讨论】:

    标签: mysql sql concat


    【解决方案1】:

    试试

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

    【讨论】:

      【解决方案2】:

      你已经得到了一半的答案。如果任何值为空,CONCAT 将产生 NULL。您正在使用COALESCE,因此如果DATA2 是,您的整个结果不为空,因此只需在合并中包含“()”。

      试试这个

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

      【讨论】:

        【解决方案3】:

        你可以使用简单的CASE:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-06
            • 1970-01-01
            相关资源
            最近更新 更多