[MSSQL] Hoe de datum van de eerstvolgende zondag bepalen

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

  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 15-04 19:43

Gé Brander

MS SQL Server

Topicstarter
Ik moet job's in Microsoft SQL Server geautomatiseerd aanmaken. Dat lukt op zich prima. Echter er zijn enkele job's die vanaf de eerstvolgende zondag of zaterdag of vrijdag moeten lopen vanaf het moment van het runnen van het script. Ik wil niet graag variabelen meegeven met het script, want dat wordt het weer niet makkelijk af te trappen.

Dus hoe bepaal ik in TSQL wat de datum is van de eerstvolgende vrijdag, zaterdag of zondag en het formaat van de datum moet het volgende zijn: yyyymmdd (vb. 20050110)

Het maakt mij eigenlijk niet zo heel veel uit hoe het teruggegeven wordt, want het omzetten naar de juiste volgorde gaat mij wel lukken, maar ik blijf maar hangen op het bepalen van de eerstvolgende vrijdag, zaterdag of zondag.

Misschien moet ik het volgende gebruiken, maar ik zie even niet in hoe.
code:
1
select datename(dw, getdate()+6)


Voor vandaag is de eerstvolgende zondag dus +6 dagen, maar ik moet niet iets meegeven met het script als variabele. Het moet volledig automatisch zelf bepaald worden.

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • synthdood
  • Registratie: November 2002
  • Laatst online: 01-05 08:26
Er is vast een mooiere en compactere manier, maar ik dacht aan zoiets:

---------------------------------------------
declare @i integer
set @i=0

/* Net zolang een dag bij vandaag optellen, totdat we op een zondag zitten (weekday=1)*/
while datepart(weekday,getdate()+@i) <> 1
set @i = @i+1

/* Dit geeft de datum van de eerstvolgende zondag */
select getdate() + @i
---------------------------------------------

Ik heb de code even uitgeprobeerd (op SQL server 2000) en het werkt prima

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

Annie

amateur megalomaan

Je hebt het over het aanmaken van jobs. Dan kan je toch gewoon via sp_add_jobschedule een freq_type=8 (weekly), freq_interval=1 (Sunday) en als startdate de huidige datum opgeven?
Zie Books Online voor de betekenis van alle mogelijke opties.

Of denk ik nu te simpel?

Today's subliminal thought is:


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 15-04 19:43

Gé Brander

MS SQL Server

Topicstarter
Annie schreef op maandag 10 januari 2005 @ 22:46:
Je hebt het over het aanmaken van jobs. Dan kan je toch gewoon via sp_add_jobschedule een freq_type=8 (weekly), freq_interval=1 (Sunday) en als startdate de huidige datum opgeven?
Zie Books Online voor de betekenis van alle mogelijke opties.

Of denk ik nu te simpel?
Je denkt helemaal niet te simpel. Je denkt simpel, en dat is vaak de oplossing. ;)
Niet goed gekeken en niet goed begrepen van mijn kant waarschijnlijk. 8)7 Mijn dank is groot voor deze terechtwijzing! _/-\o_

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 15-04 19:43

Gé Brander

MS SQL Server

Topicstarter
synthdood schreef op maandag 10 januari 2005 @ 21:58:
Er is vast een mooiere en compactere manier, maar ik dacht aan zoiets:

---------------------------------------------
declare @i integer
set @i=0

/* Net zolang een dag bij vandaag optellen, totdat we op een zondag zitten (weekday=1)*/
while datepart(weekday,getdate()+@i) <> 1
set @i = @i+1

/* Dit geeft de datum van de eerstvolgende zondag */
select getdate() + @i
---------------------------------------------

Ik heb de code even uitgeprobeerd (op SQL server 2000) en het werkt prima
Dat is inderdaad ook een prima oplossing in de richting waarin ik ook zocht. Dank, maar de oplossing van Annie vindt ik toch wat mooier, want dat hoef ik niet veel te wijzigen in mijn scripts.

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 11:39
synthdood schreef op maandag 10 januari 2005 @ 21:58:
Er is vast een mooiere en compactere manier, maar ik dacht aan zoiets:

---------------------------------------------
declare @i integer
set @i=0

/* Net zolang een dag bij vandaag optellen, totdat we op een zondag zitten (weekday=1)*/
while datepart(weekday,getdate()+@i) <> 1
set @i = @i+1

/* Dit geeft de datum van de eerstvolgende zondag */
select getdate() + @i
---------------------------------------------

Ik heb de code even uitgeprobeerd (op SQL server 2000) en het werkt prima
Ik zie dat 't al is opgelost, maar er is inderdaad een compactere oplossing:
code:
1
select getdate()+(8-datepart(weekday,getdate()))
Pagina: 1