2015-01-24 3 views
1

давайте предположим, что У меня есть таблица с этими столбцами:MySQL Concat выбрать только если условие справедливо

DATA1 | DATA2 | DATA3 

Я хочу напечатать: DATA1 (DATA2) если DATA2 не равно нулю, только если DATA1DATA2 равна нулю. Если бы я сделать это с CONCAT:

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

Я проблемы, «(» и «)» всегда печатаются, даже если DATA2 имеет нулевое значение, так что я буду иметь как результат: DATA1() вместо DATA1

Есть ли способ сделать это с помощью sql в базе данных mysql?

ответ

0

Вы можете использовать оператор UNION для объединения двух результирующих наборов. Первый набор результатов будет извлекать данные, где DATA2 является нулевым, а в другом наборе результатов будет иметь значение DATA2 как null.

1

Вы можете использовать простой случай:

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

Вы уже получили половину там ответ. CONCAT даст NULL, если любое из значений равно NULL. Вы используете COALESCE, поэтому весь ваш результат не равен нулю, если DATA2 есть, поэтому просто включите «()» внутри коалесценции.

Попробуйте

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

Попробуйте

SELECT IF(DATA2 IS NOT NULL, CONCAT(DATA1, ' (', DATA2, ')'), DATA1) AS data; 
Смежные вопросы