У меня есть вопрос относительно операторов case / if в MySQL в отношении обновления поля, основанного на возможности даты в поле. У меня есть два поля. Тот, который содержит дату («LastDayToNotify») и тот, который содержит текстовое сообщение («NotifyMessage»)
Поле даты может содержать одно из трех значений: пустое поле, пустое значение или дату.
Мой вопрос - возможно ли, и если да, то как в MySQL иметь запрос, который устанавливает значение одного поля (NotifyMessage) на основе того, прошла ли дата (LastDayToNotify)? Примером может быть:
Если дата не прошла (дата сегодня или раньше), обновите поле NotifyMessage, указав «Общее сообщение»
Но если поле даты пустое, пустое или передано, оно ничего не делает.
Я протестировал пару модификаций ответов в этой теме, но не смог успешно учесть все 3 возможных сценария дат. Здесь
Я знаю, что это, вероятно, вопрос новичка, но я никогда не сталкивался с этой конкретной потребностью.
Спасибо!
3 ответа
Я предполагаю, что вы используете вменяемые типы полей (date
или datetime
) ...
UPDATE table
SET
NotifyMessage = 'Generic Message'
WHERE
LastDayToNotify IS NOT NULL
AND LastDayToNotify >= CURDATE();
Если вы еще не храните даты в виде date
типов, взгляните на: Преобразование даты в MySQL из строкового поля
По моему опыту, вы не можете установить значение с помощью оператора CASE, но вы можете что-то перечислить. Это, однако, будет отображаться в виде отдельного столбца.
НАПРИМЕР
CASE WHEN date < SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
THEN "Generic Message"
ELSE 0
END AS 'Before Today'
Затем вам нужно будет создать больше операторов case, чтобы охватить другие сценарии, такие как NULL.
Вы можете использовать этот простой запрос:
UPDATE yourTable SET NotifyMessage = 'Generic Message'
WHERE LastDayToNotify <= CURDATE();
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.