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

Пример: 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

Может ещё что подскажете?
  • Вопрос задан
  • 61 просмотр
Решения вопроса 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%". Но скорее всего будут просадки по производительности. Тем не менее, если пользователей у вас немного и/или этот функционал не так часто будет запрашиваться, то такой вариант имеет право на существование. Только индекс на столбец не забудьте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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