Как сравнивать и использовать только время из формата datetime в sql? Моя вставка дана в формате datetime

#mysql #sql

#mysql #sql

Вопрос:

Пожалуйста, обратите внимание, что это не мой полный код для запроса. Мне просто нужно понять, как сравнивать только время. Вот мой код создания таблицы

 CREATE TABLE IF NOT EXISTS `mydb`.`ActivityBooking` (
  `ActivityTime` datetime  NOT NULL,
  `NumPeople` INT NULL,
  `ActivityID` VARCHAR(45) NOT NULL,
  `GuideID` VARCHAR(10) NOT NULL,
  `Reservation_ReservationID` VARCHAR(10) NOT NULL,
  PRIMARY KEY (`ActivityTime`, `ActivityID`),
  INDEX `fk_ActivityBooking_Activity1_idx` (`ActivityID` ASC) VISIBLE,
  INDEX `fk_ActivityBooking_Staff1_idx` (`GuideID` ASC) VISIBLE,
  INDEX `fk_ActivityBooking_Reservation1_idx` (`Reservation_ReservationID` ASC) VISIBLE,
  CONSTRAINT `fk_ActivityBooking_Activity1`
    FOREIGN KEY (`ActivityID`)
    REFERENCES `mydb`.`Activity` (`ActivityID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_ActivityBooking_Staff1`
    FOREIGN KEY (`GuideID`)
    REFERENCES `mydb`.`Staff` (`StaffID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_ActivityBooking_Reservation1`
    FOREIGN KEY (`Reservation_ReservationID`)
    REFERENCES `mydb`.`Reservation` (`ReservationID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);
  

Вставка таблицы

 Insert into activitybooking values('2020-10-7 15:17:00',6,'C01','S5','R321');
Insert into activitybooking values('2020-12-8 16:15:00',7,'D01','S2','R321');
Insert into activitybooking values('2020-11-9 18:12:00',2,'E01','R321','S4');
  

В настоящее время я застрял, потому что хочу отображать результаты для бронирований, сделанных после середины дня и до 4 вечера. Но я не знаю, как просто сравнить время с форматом datetime. Я не добавляю коды для других таблиц, чтобы свести информацию к минимуму. Но при необходимости я могу предоставить.

 select customerfname, customerlname, activityname
from customer, activitybooking,activity
where activity.activityid = activitybooking.activityid
and activitytime between time('12-0-0') and time('16-0-0');
  

Ответ №1:

Что вам нужно сделать, это применить TIME функцию к вашему activitytime столбцу, а затем сравнить ее с 12:00:00 и 16:00:00 :

 TIME(activitytime) BETWEEN '12:00:00' AND '16:00:00'
  

Обратите внимание, если вы не хотите включать 16:00:00 , замените это на 15:59:59 . Кроме того, если вы записываете временные строки в HH:mm:ss формате, вам не нужно применять TIME к ним и можно просто сравнивать напрямую.