28. april 2001 - 20:23
Der er
2 kommentarer og
1 løsning
første dag i en uge, samt aktuel uge
Jeg er i gang med et skole projekt, hvor vi udvikler en applikation i forms 4.5.
Der til skal jeg bruge/lave en funktion:
den skal på baggrund af en NUMBER, som angiver et uge nr, returnere datoen for den første dag i ugen, dvs. datoen for mandag.
foerste_dato(uge NUMBER) return DATE;
----
derudover skal jeg have fat i nummeret på den uge SYSDATE er i.
Kan man på nogen måde formatter :SYSDATE så den giver et uge nr. eller er der en anden udvej?
28. april 2001 - 23:50
#1
Ugenummeret kan du få ved:
SELECT TO_CHAR(SYSDATE, \'IW\') FROM sys.dual;
Mandag i en given uge for et bestemt år kan du få af følgende funktion (bemærk at årstallet skal skrives med fire cifre):
FUNCTION monday (week_no PLS_INTEGER, year CHAR) RETURN DATE IS
jan_1_week PLS_INTEGER;
jan_1_day PLS_INTEGER;
nof_monday PLS_INTEGER;
monday_in_week_no PLS_INTEGER;
BEGIN
-- The \"nof_monday\" is only there to make the procedure independent of the nls_territory setting
SELECT TO_CHAR(TO_DATE(\'0101\'||year, \'DDMMYYYY\'), \'IW\'),
TO_CHAR(TO_DATE(\'0101\'||year, \'DDMMYYYY\'), \'D\'),
TO_CHAR(TO_DATE(\'01012001\', \'DDMMYYYY\'), \'D\')
INTO jan_1_week, jan_1_day, nof_monday
FROM sys.dual;
IF jan_1_week>=52 THEN
jan_1_week:=0;
END IF;
monday_in_week_no:=(week_no-jan_1_week-1)*7+(8-jan_1_day)+1+(nof_monday-1);
RETURN TO_DATE(LPAD(monday_in_week_no, 3, \'0\') || year, \'DDDYYYY\');
END;
29. april 2001 - 10:26
#2
Jeg har ikke tid til at teste her til morgen, da jeg skal gå nu, men jeg kigger på det når jeg kommer hjem.
Umiddelbart ser det ud til at det er lige hvad jeg skal bruge :-)