#mysql #sql
#mysql #sql
Вопрос:
Кто-нибудь знает, как проверить, прошла ли дата. В моей базе данных есть столбец даты возврата, который является будущей датой, и когда эта дата пройдет, мне нужно включить это в триггер, чтобы предупредить менеджера. Я пробовал этот код, но он не работает.
DELIMITER //
CREATE TRIGGER date_expired BEFORE INSERT ON external_requests
FOR EACH ROW
BEGIN
IF return_date >= (return_date) Then
SIGNAL SQLSTATE '45000' set message_text='This book has not been returned to the library';
END//
DELIMITER ;
Комментарии:
1. Я не совсем понимаю, каковы ваши требования. Вам действительно нужен триггер, который предотвращает вставки с датой в прошлом? Или вам не нужен какой-то процесс, который регулярно просматривает существующие записи и отправляет информацию при достижении даты?
2. Я не понимаю смысла всего этого. Когда менеджер хочет знать, какие книги просрочены, предположительно, они могут просто выполнить запрос.
Ответ №1:
Вы ищете curdate()
?
DELIMITER //
CREATE TRIGGER date_expired BEFORE INSERT ON external_requests
FOR EACH ROW
BEGIN
IF return_date >= curdate() Then
SIGNAL SQLSTATE '45000'
set message_text='This book has not been returned to the library';
end if;
END//
DELIMITER ;
Комментарии:
1. Также он должен использовать now(), если return_date является полем datetime.
2. Стандартной и более читаемой версией будет
CURRENT_DATE
илиCURRENT_TIMESTAMP
…3. @UsagiMiyamoto почему вы хотите использовать стандарт, соответствующий
CURRENT_DATE
здесь.. Перенос этого триггера в другую базу данных потребует полной перезаписи, почему..4. @Elanochecer Столбец даты возврата является датой будущего и не может быть текущей датой
5. @user11271599 ну, это будущая дата, когда вы ее сохраняете… не всегда.