проверка возраста +18

Legushka
Дата: 16.11.2014 19:29:24
добрый день, перехожу со скуля на Postgre-)
подскажите как можно проверить у пользователя возраст на 18 летие?

в таблице есть поле birt_date, у разных персон есть даты рождения (например '1991-01-15' и '2001-05-20')
какую формулу можно сделать что бы возвращалось 1 если есть 18 лет и 0 если еще нет
с точностью до дня
Legushka
Дата: 16.11.2014 19:50:53
подскажите как перевести количество дней в дату, дальше я сам)
Legushka
Дата: 16.11.2014 20:15:05
сам себе ответил:
select case when (18-extract (year from age(timestamp DDD))>=0) then 1 else 0 end from ...


ребята подскажите для очень большой базы этот запрос критичен?
может есть быстрее способ?
лопата
Дата: 16.11.2014 20:24:39
Legushka
сам себе ответил:
select case when (18-extract (year from age(timestamp DDD))>=0) then 1 else 0 end from ...


ребята подскажите для очень большой базы этот запрос критичен?
может есть быстрее способ?

индекс по birthday есть ?

если есть -- примерно
WHERE birthday <= F{дата выборки, возрастной порог, прочая дебиловатая шняга задаваемая единожды}::date


запихнёшь свои измышления в F{} -- маладец
нет -- читай зиФакинМанъюал по фанкшанам до просветления
лопата
Дата: 16.11.2014 20:26:59
поцкриптум:
фаншан желательно иммутабный. совсем накрайняк - стабиловатый, и невкоем -- не волатильный.
/\/\/\/\/\/\
Дата: 16.11.2014 21:48:01
Может, имеет смысл пойти другим путем и немного изменить вопрос.
То есть спрашивать:
- Раньше какой даты должен родиться пользователь, чтобы ему было 18 полных лет?
Тогда исчезает функция, а появляется тупое (то есть целиком для индекса) сравнение.
Alexius
Дата: 17.11.2014 06:51:16
Legushka,

select (birthday < NOW() - interval '18 years') as ...


проверил, вроде бы работает. зачем усложнять?