Как при отправке на сервер возраста, получить персону с датой рождения?

Рейтинг: -1Ответов: 1Опубликовано: 29.01.2023

Как при отправке на сервер возраста (например 21) получить человека у которого год рождения совпадает с возрастом?

База данных

Я думал выгружать все записи с бд и проходить по всем, но, а если записей будет очень много, производительность спасибо не скажет... Сразу в голову пришло 2 варианта:

  1. Сначала узнаю год рождения(от переданного возраста), потом через формат привожу к LocalDate и сравниваю с датами из бд, но есть ещё день и месяц, идея и затухла;
  2. Ещё вариант через sql запрос сравнивать только года, но не нашел внятного объяснение как это сделать. Везде сравнивают полную дату.

sql запрос сравнение дат в бд

Ответы

▲ 2Принят

Чтобы избежать вычисления допустимого диапазона дат на стороне сервера БД с разными функциями, проще в JPA-репозитории создать метод с использованием условия BETWEEN:

List<Person> findByBirthDateBetween(LocalDate from, LocalDate to);

который аналогичен JPQL-запросу:

@Query("SELECT p FROM Person p WHERE p.BirthDate BETWEEN ?1 AND ?2")
List<Person> getPersons(LocalDate from, LocalDate to);

и реализовать дефолтный вызов такого метода для заданного возраста в годах:

default List<Person> byAge(int years) {
    return findByBirthDateBetween(
        LocalDate.now().minusYears(years),
        LocalDate.now().minusYears(years - 1)
    );
}