Как можно хранить в базе данных полные и неполные даты с возможностью поиска?
Пример: 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
Для правильного вопроса надо знать половину ответа
Как вариант - хранить в виде интервала дат двумя колонками (начало и конец интервала).
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%". Но скорее всего будут просадки по производительности. Тем не менее, если пользователей у вас немного и/или этот функционал не так часто будет запрашиваться, то такой вариант имеет право на существование. Только индекс на столбец не забудьте.
WHERE datetime IN ('2020-04-05', '2020-04', '2020')
В таком случае без LIKE запрос будет довольно шустро работать. Только не помню насчет скорости IN и нескольких AND. Кажется, IN раскладывается внутри на AND.