Я написал ниже хранимую процедуру, которая вставляет записи для определенной даты. Если дата повторяется, то необходимо обновить значения. Но при вставке новой записи за ту же дату, если какое-либо значение имеет значение null, она уже добавляет значения для этой даты. Моя хранимая процедура:
CREATE PROCEDURE sp_setrecords (IN daten date,IN daystart time,IN lunchstart time,IN lunchend time,IN breakstart time,IN breakend time,IN dayend time,IN casualleave time,IN sickleave time,IN holidays time,IN leavewithoutpay time)
BEGIN
insert into dailyrecord (date,daystart,lunchstart,lunchend,breakstart,breakend,dayend,casualleave,sickleave,holidays,leavewithoutpay) values (daten,daystart,lunchstart,lunchend,breakstart,breakend,dayend,casualleave,sickleave,holidays,leavewithoutpay)
ON DUPLICATE KEY UPDATE
date = COALESCE(VALUES(date)),
daystart = COALESCE(VALUES(daystart)),
lunchstart = COALESCE(VALUES(lunchstart)),
lunchend = COALESCE(VALUES(lunchend)),
breakstart = COALESCE(VALUES(breakstart)),
breakend = COALESCE(VALUES(breakend)),
dayend = COALESCE(VALUES(dayend)),
casualleave = COALESCE(VALUES(casualleave)),
sickleave = COALESCE(VALUES(sickleave)),
holidays = COALESCE(VALUES(holidays)),
leavewithoutpay = COALESCE(VALUES(leavewithoutpay));
END
Пример: начальные значения: "2018-01-02", "9:30:00", null, null, null, null, null, null, null, null, null "
то если я вставлю 13:30:30 на ту же дату во вторую позицию, он вернется:
"2018-01-02", нулевой "13:30:00", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"
Как я могу обновить значение только в том случае, если оно не является нулевым?
Вашему COALESCE()
нужны дополнительные аргументы:
ON DUPLICATE KEY UPDATE
date = COALESCE(VALUES(date), date),
daystart = COALESCE(VALUES(daystart), daystart),
lunchstart = COALESCE(VALUES(lunchstart), lunchstart),
. . .
Это сначала сохранит новое значение, а затем существующее значение.