Задать вопрос

Как можно хранить в базе данных полные и неполные даты с возможностью поиска?

Пример: 05.04.2020 , .04.2020 (известны месяц и год, дата не известна) , ..2020 (известен только год)

Чтобы при поиске
05.04.2020 - находило 05.04.2020 , .04.2020 (т.к. дата входит в апрель), ..2020 (входит в год)
02.04.2020 - .04.2020, ..2020
05.03.2020 - ..2020

Как вариант хранить даты как день, месяц, год в разных полях, тогда при поиске для каждого из них можно будет использовать [число] | NULL

Может ещё что подскажете?
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Shultais Education
    Основы SQL
    3 месяца
    Далее
  • Shultais Education
    Продвинутый SQL
    1 месяц
    Далее
  • Merion Academy
    Основы реляционных баз данных SQL
    1 месяц
    Далее
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как вариант - хранить в виде интервала дат двумя колонками (начало и конец интервала).
05.04.2020 как 2020-04-05 - 2020-04-05
.04.2020 как 2020-04-01 - 2020-04-30
. .2020 как 2020-01-01 - 2020-12-31
Ответ написан
Насколько знаю, таких встроенных возможностей у mysql нет. Поэтому остаётся вариант несколькими столбцами или хранение даты в виде строки 'YYYY-mm-dd'. Тогда сможете естественным образом сравнивать строки "2020", "2020-04" и "2020-04-05". Искать вхождение подстроки в строке через LIKE "2020%". Но скорее всего будут просадки по производительности. Тем не менее, если пользователей у вас немного и/или этот функционал не так часто будет запрашиваться, то такой вариант имеет право на существование. Только индекс на столбец не забудьте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы