Mam takie zagadnienie, że chciałbym w funkcji PLSQL zwrócić datę (DATE) tylko żeby wyświetlił mi się pełny miesiąc np. 20 listopada 2014.
Może jakaś podpowiedź ?
Pozdrawiam.
P.
Mam takie zagadnienie, że chciałbym w funkcji PLSQL zwrócić datę (DATE) tylko żeby wyświetlił mi się pełny miesiąc np. 20 listopada 2014.
Może jakaś podpowiedź ?
Pozdrawiam.
P.
Tak tylko rzuce, może na coś naprowadzi ten link http://www.techonthenet.com/oracle/functions/to_date.php
Taka podpowiedź:
SET serveroutput ON
declare
info date := sysdate;
begin
dbms_output.put_line(to_char(info, 'DD MONTH YYYY'));
end;
Teraz musisz z tego zrobić funkcje. W moim wypadku data jest konwertowana z DATE do CHAR.
dzięki za podpowiedzi ale może doprecyzuje o co dokładnie chodzi.
A więc ma to być tego typu funkcja:
create function moja_data(v_tekst in char)
return date
is
v_data date;
begin
-- tutaj jakiś kodzik
return v_data;
end;
/
W wyniku ma się pojawić np. 20 listopada 2014.
A, to o tym piszą chyba tutaj http://www.oracle.com/technetwork/issue-archive/2012/12-jan/o12plsql-1408561.html ... Od "Use TO_CHAR to display the full names of both the day and the month in the date: .... ". Chyba, że dalej nie rozumiem :)
Odpowiedź już masz w tym temacie. Poczytaj linki:)
Na szybko poradziłem sobie z DBMS_OUTPUT.PUT_LINE.
create or replace function pesel_data(pesel in char)
return date
is
v_data date;
v_pomoc date;
begin
v_data:= null;
v_pomoc:=substr(pesel,1,6);
DBMS_OUTPUT.PUT_LINE(to_char(v_pomoc,'dd month yyyy'));
return v_data;
end;
/
show errors
ale wydaje mi się to mało eleganckie. Wolał bym to zwrócić w return.
Jeszcze pomyślę albo może ktoś jeszcze coś podpowie. :)
Witam,
zrobiłbym to w ten sposób :
create or replace function pesel_data(pesel in varchar2)
return varchar2
is
v1 varchar2(10);
v2 varchar2(20);
begin
v1:=substr(pesel,1,6);
V2:=to_char(to_date('19'||v1,'yymmdd'),'dd month yyyy');
return v2;
end;
/
Wywołanie funkcji:
select pesel_data('86043056970') from dual
Jest jedna wada mojego rozwiązania , prawidłowo pokazuje przekonwertowany pesel dla ludzi urodzonych w XX wieku :-P.
Jeżeli chcesz prawidłowe dane dla całej populacji to pokombinuj z funkcjami to_date i to_char, możesz także obsłużyć to funkcją CASE. Warto zauważyć ze ww rozwiązanie działa dla najliczniejszej grupy ludzi na świecie :D.
Pozdrawiam
Dzięki @plug, problem całej populacji mam rozwiązany :)
Chodzi o to, że funkcja ma zwrócić DATE .
Wydaje mi się, że wartości typu DATE, Oracle wypluwa tylko w formacie 'YYYY/MM/DD'.