Hej!
Jag har ett problem med en SQL-Syntax som känns relativt enkel men idé-fabriken har tagit tidig semester.
Jag ska försöka beskriva mitt problem så enkelt som möjligt.
Problemet
Jag vill hämta ut dagens vecka utifrån Sälj_datum som är av formatet TIME (YYYY-MM-DD)
Tidigare har vi hämtat ut dagens månad utifrån sälj_datum och det gör vi så här:
SELECT "tables"
FROM SALJ
WHERE SALJ_DATUM>=CAST(TO_DATE(CONCAT('PARAM_2', '01'), 'YYYY-MM-DD') AS DATE ANSI)
AND SALJ_DATUM<= CAST(LAST_DAY(TO_DATE(CONCAT('PARAM_2', '01'), 'YYYY-MM-DD')) AS DATE ANSI)
GROUP BY "tables"
Kommentarer kring syntaxen:
Param2 = YYYY-MM
Param 2 är fördefinierade värden, d.v.s i detta fall kommer det visas
2008-05 då selecten väljer ut sista månaden.
Användaren har då möjligheten att välja dagens månad eller annan månad utifrån vad han specificerar i Param_2.
Summa sumarum
Så jag behöver alltså göra om YYYY-MM-DD till YYYY-WW.
Glömde nämna, jag sitter i Oracle RDB miljö
// Peso
BrimbaMedlem sedan dec. 19995 874 inläggKan du använda dig av funktionen ISOWeek?
http://msdn.microsoft.com/en-us/library/aa258261(SQL.80).aspx
CREATE FUNCTION ISOweek (@DATE datetime)
RETURNS int
AS
BEGIN
DECLARE @ISOweek int
SET @ISOweek= DATEPART(wk,@DATE)+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
--Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
--Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)=12) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END
.edit, jag missade din redigering att du satt i oraclemiljö, men jag låter ändå detta tipset vara kvar då det kanske kan hjälpa någon annan som också missar din sista rad. :)
Jag har inga tips om hur du gör i oracle tyvärr.