webForumDet fria alternativet

Problem SQL-Syntax

1 svar · 518 visningar · startad av Almapeso

AlmapesoMedlem sedan maj 20081 inlägg
#1

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. 19992 966 inlägg
#2

Kan 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.

Genererad på 355 ms · cache AV · v20260730165559-full.f96bc7eb