MySQL запрос для проверки нескольких диапазонов дат не работает

0

Ниже приведены мои данные и запрос,

academic year start date - 2018-01-01
academic year end date   - 2018-06-30

Таблица условий

term_id    parent_id      start_date          end_date 
1          null                2018-01-01          2018-01-30
2          1                   2018-01-01          2018-01-10
3          1                   2018-01-11          2018-01-20
4          null                2018-02-01          2018-02-28
5          4                   2018-02-01          2018-02-10
6          4                   2018-02-11          2018-02-20

Я хочу добавить новый термин, который не должен быть в диапазоне дат term_id 1,2, а также в диапазоне дат начала и окончания учебного года. Но в моем запросе он не работает ниже, это мой запрос,

Я ввел, он не должен вводить снизу запрос

start_date - 2018-02-11 
end_date   - 2018-02-25 

SELECT * from term
where parent_id=null
and start_date >= 2018-02-11 
and end_date <= 2018-02-25
and start_date >= 2018-01-01(academic year start date)
and end_date <= 2018-06-30(academic year end date)

То же самое для ввода суб-термина должно быть в диапазоне родительских сроков и уникальным во всех подзаголовках одного и того же родительского термина. Я ввел, который не должен входить,

start_date - 2018-02-13
end_date -2018-02-18

Мой запрос ниже,

SELECT * from term
where parent_id=4
and start_date >= 2018-02-13
and end_date <= 2018-02-18
and start_date >= 2018-02-01(parent term start date)
and end_date <= 2018-02-28(parent term end_date)
and start_date >= 2018-01-01(academic year start date)
and end_date <= 2018-06-30(academic year end date)
  • 0
    Является ли весь этот код тем, что вы действительно используете? как значения?
  • 0
    Мне нравится, когда они присутствуют, они редактируют ... возвращают пух и не комментируют здесь. Вы тот тип, который не будет беспокоить и просто хочет, чтобы вас обманули? У меня может быть что-то, с чем ты можешь лаять на меня.
Показать ещё 3 комментария
Теги:

1 ответ

0

Итак, я собираюсь спросить об этом: Имя столбца start_date или start_time?

УДАЛЕНИЕ НИЖЕ, ПОТОМУ ЧТО ВСЕ ЕЩЕ СООТВЕТСТВУЕТ

Даты используются в операторах SQL, таких как строки, поэтому их нужно обернуть в двойные кавычки ". Таким образом, запрос должен быть примерно таким:

SELECT * from term
where parent_id=4
and start_date >= "2018-02-13"
and end_date <= "2018-02-18"
and start_date >= "2018-02-01"
and end_date <= "2018-02-28"
and start_date >= "2018-01-01"
and end_date <= "2018-06-30"

Однако ваш SQL-запрос очень запутан. Вы говорите, где start_date больше, чем 13 февраля, и это больше, чем 1 февраля, и это больше, чем 1 января, и то же самое для даты окончания.

Вы можете просто сказать:

SELECT * FROM term
WHERE parent_id = 4
AND start_date >= "2018-01-01"
AND end_date <= "2018-06-30"

Это выполнило бы все вышеупомянутые заявления "И".

  • 0
    Единственное, что у меня есть, - это не «Все даты обрабатываются как строки», а «строки, используемые при сравнении с датами, преобразуются в даты», хотя даже это несколько упрощено.
  • 0
    Вы правы, я мог бы сформулировать это немного лучше. Я отредактирую
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню