Рассчитать возраст по дате рождения с форматированием

Я хотел бы рассчитать возраст по дате рождения, хранящейся в виде строки, используя формат в комментариях в коде. Вот мой код:

--pnr values
--'19490321-7000'
--'19540201-7000'
--'19650823-7000'

declare
v_now date :=to_date(sysdate, 'YYYY-MM-DD');
v_dob date;
v_age number;
cursor c_carowners is select fnamn, enamn, pnr
                      from carowners;
begin
  for v_rec in c_carowners loop

    v_dob:= to_date(substr(v_rec.pnr,1,8), 'YYYY-MM-DD');
    v_age := (months_between(v_now, v_dob))/12;

    dbms_output.put_line('Age is: '||v_age);

  end loop;
end;

В результате я получаю следующее:

Statement processed.
Age is: -1935.252688172043010752688172043010752692
Age is: -1940.115591397849462365591397849462365592
Age is: -1951.674731182795698924731182795698924733

Я предполагаю, что что-то не так с годом, но я не могу понять это!

mysql не plsql. Я полагаю, это не имеет ничего общего с MySQL?

trincot 13.12.2020 18:49

Правильно, сейчас я отредактировал теги

Mattias Törnqvist 13.12.2020 18:54
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка именно в этой строке:

v_now date :=to_date(sysdate, 'YYYY-MM-DD');

Вы не должны вызывать to_date на sysdate, потому что sysdate уже имеет тип данных date.

Вы должны просто сделать:

v_now date := sysdate;

Или даже исключите эту переменную и используйте sysdate непосредственно в своих вычислениях.

Я бы также изменил другой формат даты на YYYYMMDD, поскольку в данных вашей таблицы нет дефисов.

Обратите внимание, что вы можете сделать это без PL/SQL с помощью запроса:

select pnr,
       months_between(sysdate, to_date(substr(pnr,1,8), 'YYYYMMDD'))/12
from   carowners;

Конечно! Он работает отлично, большое спасибо!

Mattias Törnqvist 13.12.2020 20:31

Другие вопросы по теме