Начало » Использование СУБД » Firebird, HQbird, InterBase » Посчитать возраст
Посчитать возраст [сообщение #4007] |
Tue, 09 January 2024 15:13 |
pastor
Сообщений: 83 Зарегистрирован: June 2022 Географическое положение: Калуга
|
Member |
|
|
Думал, что умею
select datediff( year, cast('27.07.1990' as date), cast('01.01.2024' as date)),
dateadd( year, 34, cast('27.07.1990' as date))
from RDB$DATABASE
результат 34
PS для ленивых
select datediff( year, :DATE_BORN, CURRENT_DATE) -
iif( dateadd( year, (datediff( year, :DATE_BORN, CURRENT_DATE)), :DATE_BORN) > CURRENT_DATE, 1, 0)
from RDB$DATABASE
[Обновления: Tue, 09 January 2024 15:27] Известить модератора
|
|
|
|
|
Re: Посчитать возраст [сообщение #4011 является ответом на сообщение #4010] |
Tue, 09 January 2024 16:13 |
shavluk
Сообщений: 82 Зарегистрирован: June 2022 Географическое положение: Одеса
|
Member |
|
|
У меня есть такая функция для определения целого количества дней/месяцев/лет между датами
create or alter function GET_DATE_PART (
D1 date,
D2 date,
VID integer = 0)
returns integer
as
declare variable y int;
declare variable d01 date;
declare variable d02 date;
begin
d01 = minvalue(d1, d2);
d02 = maxvalue(d1, d2);
if (vid = 0) then -- Дни
y = d02 - d01 + 1;
else
if (vid = 1) then -- Месяцы
y = datediff(month, d01 - extract(day from d01) + 1, d02 - extract(day from d01) + 2);
else
if (vid = 2) then -- Годы
begin
y = extract(year from d02) - extract(year from d01);
if (dateadd(year, y, d01) > d02) then
y = y - 1;
end
if (d2 < d1) then y = -y;
return y;
end
GET_DATE_PART('27.07.1990', '01.01.2024', 2) = 33
|
|
|
|
Re: Посчитать возраст [сообщение #4013 является ответом на сообщение #4012] |
Tue, 09 January 2024 17:28 |
shalamyansky
Сообщений: 150 Зарегистрирован: August 2022
|
Senior Member |
|
|
Вот так точно:
create function calculate_age(
birthday date
, otherday date
)returns
integer
as
declare variable birthyear integer;
declare variable otheryear integer;
declare variable age integer;
begin
birthyear = extract( year from birthday );
otheryear = extract( year from otherday );
age = otheryear - birthyear;
if( extract( month from birthday ) > extract( month from otherday ) )then begin
age = age - 1;
end else if( extract( month from birthday ) = extract( month from otherday ) )then begin
age = iif( extract( day from birthday ) > extract( day from otherday ), age - 1, age );
end
return age;
end
|
|
|
Переход к форуму:
Текущее время: Sat Nov 23 16:04:45 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00664 секунд
|