Почему CONCAT не вставляет текст в первый раз в таблицу MySQL? - PullRequest
0 голосов
/ 01 января 2019

Я использую UPDATE для вставки простого текста в таблицу, где поле имеет значение MEDIUMTEXT (обнуляемое поле).Странно, что он не работает, когда поле изначально пустое.Если я вручную введу хотя бы один символ / пробел, он будет работать.

Я хочу добавить новый текст в существующий текст в поле.

UPDATE pen SET  
                PEN_STATUS = @PenStat,
                PEN_STATUS_CHANGE_REASON = CONCAT(PEN_STATUS_CHANGE_REASON,'\n',ChangeDate,':',EmployeeID,':',ChangeReason)
            WHERE PEN_ID = PenID;

Почему это так?

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Предположительно, потому что что-то есть NULL.Попробуйте вместо этого использовать CONCAT_WS():

UPDATE pen
    SET PEN_STATUS = @PenStat,
        PEN_STATUS_CHANGE_REASON = CONCAT_WS('\n',
                                             PEN_STATUS_CHANGE_REASON,
                                             CONCAT_WS(':', ChangeDate, EmployeeID, ChangeReason
                                                     )
                                            )
    WHERE PEN_ID = PenID;

CONCAT_WS() игнорирует NULL аргументы.Кроме того, разделитель должен быть указан только один раз.

0 голосов
/ 01 января 2019

CONCAT не обрабатывает NULL значения.Как объяснено в , руководство MySQL :

CONCAT() возвращает NULL, если любой аргумент равен NULL.

Вы хотите использовать COALESCE дляобрабатывать этот вариант использования, как:

UPDATE pen SET  
    PEN_STATUS = @PenStat,
    PEN_STATUS_CHANGE_REASON = CONCAT(
        COALESCE(PEN_STATUS_CHANGE_REASON, ''),
        '\n', 
        ChangeDate,
        ':',
        EmployeeID,
        ':',
        ChangeReason
    )
WHERE PEN_ID = PenID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...