MYSQL Concat не работает

ОБНОВИТЬ профиль SET избранное=CONCAT(избранное,"123"), ГДЕ id=1

я хочу добавить 123 в избранное, но если значение по умолчанию для избранного установлено на NULL, тогда этот запрос не будет работать. Какой будет запрос, если для избранного установлено значение NULL, а затем добавлено 123 с ним


person Wasim A.    schedule 24.02.2011    source источник


Ответы (4)


Оберните поле функцией COALESCE:

UPDATE profile
SET favourties = CONCAT(COALESCE(favourties, ''),"123")
WHERE id=1
person The Scrum Meister    schedule 24.02.2011

Вы, вероятно, не можете объединить что-то с NULL. Может быть, вы можете использовать coalesce?

UPDATE profile SET favourties=CONCAT(COALESCE(favourites,""),"123") WHERE id=1

см.: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

Вы можете использовать ifnull, как говорит @zerkms, но это не соответствует стандарту SQL. Хотя это немного быстрее. Прочтите об этом по этой ссылке: http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/performance-isnull-vs-coalesce.aspx

person Nanne    schedule 24.02.2011

Вы также можете использовать CONCAT_WS() (документы ), который работает с NULL, как и следовало ожидать: преобразует их в пустую строку:

UPDATE profile SET favourties = CONCAT_WS('', favourties, "123") WHERE id = 1;

Лично я сейчас использую только CONCAT_WS(), потому что меня раздражает необходимость беспокоиться о NULL. Я редко использую NULL, поэтому мне не нужно об этом беспокоиться, просто на всякий случай. Это просто раздражает, чтобы понять, почему вы получаете пустую строку, когда это просто не имеет смысла.

person Darryl Hein    schedule 24.02.2011

В PHP я использую:

SET `trans`=concat('$var', trans)

для добавления к строке уже в столбце trans. Это не сработает в столбце с именем group без использования обратного галочки group внутри скобок, тогда как с трансом обратные галочки не нужны.

person Kenny Doyle    schedule 05.10.2016