webForumDet fria alternativet

Problem SQL-Syntax

Databaser & SQL

1 svar · 518 visningar · startad av Almapeso

Medlem sedan maj 20081 inlägg
Frågan#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

Medlem sedan dec. 19995 874 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.

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)