Avatar billede mundt Nybegynder
23. januar 2002 - 11:12 Der er 8 kommentarer og
3 løsninger

DAYOFWEEK og DAYOFYEAR ??

Jeg har lavet en trigger som skal opdatere to felter som indeholder 'dag i året' og 'dag i ugen'. Jeg skulle udmiddelbart mene at kan benytte henholdsvis DAYOFYEAR og DAYOFWEEK til det formål.

Min kodelinier ser ud som nedenstående:

:new.day_of_year    := to_char(DAYOFYEAR(:new.date_transaction));

:new.day_of_week    := to_char(DAYOFWEEK(:new.date_transaction));

:new.date_transaction er et datofelt med langt datoformat.

Når jeg kompilerer få jeg følgende fejl:

PLS-00201: identifier 'DAYOFYEAR' must be declared
PLS-00201: identifier 'DAYOFWEEK' must be declared

Der er ingen hjælp at hente på metalink.

Avatar billede holdam Nybegynder
23. januar 2002 - 11:23 #1
Prøv med TO_CHAR(:new.date_transaction, 'DDD') og TO_CHAR(:new.date_transaction, 'D')
Avatar billede teepee Nybegynder
23. januar 2002 - 11:25 #2
prøv med
to_char(:new.date_transaction,'D') for dayofweek
og
to_char(:new.date_transaction,'DDD') for dayofyear
Bemærk: Der er forskel på resultatet, om du kører amerikansk eller europæisk
Avatar billede mundt Nybegynder
23. januar 2002 - 11:27 #3
Returnerer

to_char(:new.date_transaction,'D') for dayofweek

ikke f.eks. 'SUN' eller 'MON'?

Det skal være et tal - f.eks 7 for 'SUN' og 1 from 'MON'
Avatar billede teepee Nybegynder
23. januar 2002 - 11:30 #4
Så skal du bruge europæisk nls_lang så får du 1 for mandag
Avatar billede holdam Nybegynder
23. januar 2002 - 11:31 #5
Nej, det er 'DY' som giver 'WED' (i dag)
Avatar billede teepee Nybegynder
23. januar 2002 - 11:32 #6
MS2>select to_char(sysdate,'D') from dual;

T
-
4

MS2>select to_char(sysdate,'DAY') from dual;

TO_CHAR(S
---------
WEDNESDAY

MS2>select to_char(sysdate,'DY') from dual;

TO_
---
WED
Avatar billede teepee Nybegynder
23. januar 2002 - 11:34 #7
Hvis du ikke kan få lov at skifte til europæisk nls_lang så kan du runtime gøre det med fælgende kald:

        dbms_session.set_nls('nls_language', '''DANISH''');
        dbms_session.set_nls('nls_territory', '''DENMARK''');
Avatar billede molan Nybegynder
24. januar 2002 - 14:57 #8
Skriv dette:

:new.day_of_year    := to_char(:new.date_transaction,'DDD','NLS_DATE_LANGUAGE=DANISH');

:new.day_of_week    := to_char(:new.date_transaction,'D','NLS_DATE_LANGUAGE=DANISH');
Avatar billede teepee Nybegynder
24. januar 2002 - 16:27 #9
MS2>select to_char(sysdate,'D','NLS_DATE_LANGUAGE=AMERICAN') from dual;

T
-
5

MS2>select to_char(sysdate,'D','NLS_DATE_LANGUAGE=DANISH') from dual;

T
-
5

Dur åbenbart kun for de skrevne dato relatered værdier såsom måneds navn og dagens navn
Avatar billede molan Nybegynder
28. januar 2002 - 16:04 #10
teepee man er nød til at bruge en:
alter session set NLS_TERRITORY=DENMARK

for at det virker og så er 'NLS_DATE_LANGUAGE=DANISH' ikke længere nødventig.
Avatar billede molan Nybegynder
29. januar 2002 - 12:54 #11
I tilfælde af at det ikke fremgå tydeligt nok af min kommentar, så har teepee ret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester