Можно ли использовать CONCAT_WS добавить разделитель, только если значение не пустое

Скажем, у меня есть эта таблица

id  a       b
1   data    1234
2   data

Я хочу объединить с разделителем (но), если нет данных, не добавляйте разделитель.

Если я сделаю

UPDATE `table` SET `b` = CONCAT_WS(',',`b`,'newData') WHERE `id` = '1'

Я получаю ожидаемый 1234, новые данные в b

но я делаю

UPDATE `table` SET `b` = CONCAT_WS(',',`b`,'newData') WHERE `id` = '2'

Я получаю, новые данные в b ((но я хочу только новые данные без разделителя)).

Есть ли способ сделать это ?

0

Решение

Вы можете попробовать это Mate:

# [A] sample result set for checking
SELECT
`a`, `b`,
IF(
(`a` IS NOT NULL AND `a` != '')
AND (`b` IS NOT NULL AND `b` != ''),
CONCAT_WS(',', `a`, `b`),
REPLACE(CONCAT_WS(',', `a`, `b`), ',', '')
) `result`
FROM `table`
WHERE `id` IN (1, 2);

Если результат установлен в [A] удовлетворившись тем, что вам нужно, вы можете продолжить работу со скриптом, используя [B]


Запрос на обновление:

# [B] process query for the new values
UPDATE `table`
SET `b` = IF(
(`a` IS NOT NULL AND `a` != '')
AND (`b` IS NOT NULL AND `b` != ''),
CONCAT_WS(',', `a`, `b`),
REPLACE(CONCAT_WS(',', `a`, `b`), ',', '')
)
WHERE `id` IN (1, 2);

Надеюсь, я могу помочь, ура!

0

Другие решения

Других решений пока нет …