Thread: SQL functie
-
17-06-2013, 14:58 #1Member
- Registered
- 09/02/12
- Location
- Ergens
- Posts
- 540
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
SQL functie
Ik ben bezig aan een SQL functie die het aantal werkdagen optelt bij een datum en deze berekende datum teruggeeft.
Deze functie moet wel rekening houden met alle feestdagen. Maar ik weet niet hoe ik dit kan implementeren.
Code:CREATE FUNCTION Optellen (@StartDate DATETIME, @Number INT) RETURNS DATETIME AS BEGIN RETURN DATEADD(DAY, @Number, @StartDate) ENDno votes
-
-
17-06-2013, 16:27 #2Member
- Registered
- 09/02/12
- Location
- Ergens
- Posts
- 540
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Oplossing

Code:CREATE FUNCTION Optellen (@StartDate DATETIME, @Number INT) RETURNS DATETIME AS BEGIN DECLARE @Counter INTEGER SET @Counter = 1 WHILE @Counter <= @Number BEGIN SET @StartDate = DATEADD(DAY, 1, @StartDate) IF (DATEPART(dw, @StartDate) != 1) AND (DATEPART(dw, @StartDate) != 7) BEGIN DECLARE @Holidays TABLE(holidayDate DATETIME) INSERT INTO @Holidays (holidayDate) VALUES ('2013-01-01 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-03-31 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-04-01 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-05-01 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-05-09 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-05-19 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-05-20 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-07-21 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-08-15 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-11-01 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-11-11 00:00:00') INSERT INTO @Holidays (holidayDate) VALUES ('2013-12-25 00:00:00') IF (NOT EXISTS (SELECT * FROM @Holidays h WHERE h.holidayDate = @StartDate)) BEGIN SET @Counter = @Counter +1 END END END RETURN @StartDate ENDno votes
-
18-06-2013, 13:47 #3Approved 9-lifer
- Registered
- 03/12/03
- Location
- Oostende
- Posts
- 2,599
- iTrader
- 78 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/10
en je gaat iedere keer die table creëren? Steek die één keer in uw databank voor jaren ver..
no votes
-
19-06-2013, 21:52 #4Member
- Registered
- 17/07/02
- Location
- Wilrijk
- Posts
- 1,994
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 9/16
De vraag is niet HOE doet ge dat in Sql maar eerder WAAROM doet ge dat in Sql
no votes
-
20-06-2013, 09:09 #5Crew Member
- Registered
- 01/09/02
- Location
- Peutie
- Posts
- 7,664
- iTrader
- 0
- Mentioned
- 4 Post(s)
- Reputation
- 13/105
Omdat ge dat wilt gebruiken in een stored procedure die door verschillende applicaties geschreven in verschillende talen gebruikt dient te worden? Er zijn 101 redenen waarom dat hij zoiets in SQL zou willen doen...
Soit, woony heeft een punt. Voorzie een aparte tabel waar die data in komt te staan die je dan om de zoveel jaar eens moet bijvullen.Vanaf nu gaan we verder op BeyondGaming!
In deze thread wordt uitgelegd hoe je jouw account kan migreren.no votes
-
13-07-2013, 22:34 #6Member
- Registered
- 06/11/03
- Location
- Geel
- Posts
- 959
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/4
Je mag wel niet vergeten dat een feestdag ook op een zaterdag of zondag kan vallen. In de meeste bedrijven wordt die dan de opvolgende maandag opgenomen.
Daarnaast kan je ook een extra veld voorzien in de tabel omdat de meesta data onafhankelijk van externe factoren zijn. Zo zijn 25 dec en 1 jan jaar/dag onafhankelijk. Dat is op 10 jaar al snel een verschil van 75% ofzo dat je dan nog moet ingeven. Het zal wss wel database technisch zwaarder zijn (je zou een datepart moeten uitvoeren op die data). Geen idee exact hoe zwaar, dat zal van de query afhangen natuurlijk, en hoe vaak die draait.no votes
