Если дата прошла

#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 ну, это будущая дата, когда вы ее сохраняете… не всегда.