Toon posts:

[MSSQL] Eerste week van het jaar

Pagina: 1
Acties:
  • 258 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Is er in MS SQL een procedure waarmee je kan instellen wat de eerste week van het jaar is. Bijvoorbeeld de week waarin 1 januari valt (standaard instelling) of de eerste week waarvan 4 dagen in het nieuwe jaar vallen (zoals we in nederland hanteren en ik ook zou willen gebruiken).

Volgens laatste voorbeeld zou 1 jan. 2000 dus in week 52 van 1999 vallen. Maar volgens SQL server is dat week 1 en daardoor klopt er niets meer van mijn administratie systeempje :'(

weet iemand dus een manier om dit te veranderen?

:Z

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

mssql geeft altijd het weeknummer volgens de amerikaanse(?) standaard terug.
Op msdn stond onderstaand voorbeeldje voor een user-defined function om dates om te rekenen naar een iso weeknummer. Als je zelf wat wil schrijven of meer info wil hebben dan moet je maar 's zoeken op 'ISO 8601:1988', er is meer dan genoeg over te vinden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

Today's subliminal thought is:


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Ik vond deze ook nog terug tussen mijn cursus materiaal, misschien heb je er wat aan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
This procedure returns the ISO week number of the specified date.
If you don't pass a date it defaults to the current date.
Author: Berrie Roelofs
Email: roelofsb@xs4all.nl
Version: 20001221.01
Call: sp_week_number [<date>]
*/
create procedure sp_week_number
@date datetime  = null

as
declare @ISOweek integer
set datefirst 1 -- Monday is the first day of the week

if @date IS NULL
   set @date = getdate()
select @ISOweek = datepart(wk,@date)+1-datepart(wk,'Jan 4,'+CAST(datepart(yy,@date) as CHAR(4)))
if (@ISOweek = 0)
   select @ISOweek = datepart(wk, 'Dec '+ CAST(24+datepart(day,@date) as CHAR(2))
             +','+CAST(datepart(yy,@date)-1 as CHAR(4)))+1 

RETURN @ISOweek

Today's subliminal thought is:


Verwijderd

Topicstarter
Annie, in ieder geval bedankt voor de moeite om deze functies voor me op te zoeken... Ik denk dat ik deze wel kan gebruiken... :)


:z

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Bekent probleem vind het ook erg inconsequent in sqlserver, aangezien je wel @@DATEFIRST functie hebt om te bepalen welke dagde week begint.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op woensdag 16 januari 2002 11:57 schreef raptorix het volgende:
Bekent probleem vind het ook erg inconsequent in sqlserver, aangezien je wel @@DATEFIRST functie hebt om te bepalen welke dagde week begint.
Ach, zo blijft er voor de developer ook nog wat over om zelf te schrijven... uhm...*kuch*... hergebruiken ;)

Today's subliminal thought is:

Pagina: 1