Формат системной даты PL/SQL не работает?

У меня проблема с форматированием sysdate в PL/SQL. Я пытаюсь вычислить свой возраст в день (поэтому он должен вернуть что-то вроде 20,44). Однако sysdate не будет работать с этим форматом, и значение v_leeftijd продолжает возвращать -2000,91. Очевидно, что это не мой возраст. Как мне это решить? У меня есть следующий код:

declare
v_vandaag date := to_date(sysdate, 'DD-MM-YYYY');
v_geboortedatum date := to_date('29-05-2014', 'DD-MM-YYYY');
v_leeftijd number(10,2);

begin

--leeftijd/dagen = leeftijd in jaren
v_leeftijd := (v_vandaag - v_geboortedatum)/365;

dbms_output.put_line(v_leeftijd);

end;

person viddrawings    schedule 30.10.2014    source источник
comment
[..] the value v_leeftijd keeps returning -2000.91. Obvious that isn't my age. Поздравляем, вы, наверное, самый молодой участник SO! Как, черт возьми, вам удалось за столь короткое время увлечься устаревшими технологиями Oracle?   -  person user272735    schedule 31.10.2014


Ответы (1)


sysdate уже свидание:

SET SERVEROUTPUT ON
declare
    v_geboortedatum date := to_date('29-05-2014', 'DD-MM-YYYY');
    v_leeftijd number(10,2);
begin
    --leeftijd/dagen = leeftijd in jaren
    v_leeftijd := (sysdate - v_geboortedatum)/365;

    dbms_output.put_line(v_leeftijd);
end;
/
person Sebas    schedule 30.10.2014
comment
Спасибо! Теперь он работает правильно, для меня. Однако, когда мы запустим наше апекс-приложение, мои товарищи по команде получат другое значение. Потому что в Нидерландах у компьютеров почему-то другая системная дата. Мой компьютер отформатирован на английском языке. Как мне это решить? - person viddrawings; 31.10.2014
comment
Да, sysdate — это системная дата, зависящая от часового пояса. Вы ничего не можете с этим поделать, но я сомневаюсь, что это проблема, поскольку все даты, которыми вы манипулируете, в любом случае жестко закодированы, верно? 29-05-2014 не обязательно совпадает с PST или GMT. Я пытаюсь сказать, что вы должны договориться о стандартном часовом поясе. В промышленности мы обычно выбираем UTC для хранения дат. Остерегайтесь, однако, что SYSDATE - это системная дата, которая отличается от даты оракула. Это означает, что он использует часовой пояс вашего СЕРВЕРА, а не БАЗЫ ДАННЫХ. - person Sebas; 31.10.2014
comment
Спасибо за объяснение! Поскольку это школьный проект, можно просто использовать серверное время. Но хорошо вспомнить. - person viddrawings; 04.11.2014