Thread: SQL functie

  1. #1
    kney's Avatar
    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)
    END
    no votes  

  2. #2
    kney's Avatar
    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
    
    END
    no votes  

  3. #3
    woony's Avatar
    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  

  4. #4
    Moto's Avatar
    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  

  5. #5
    Tyfius's Avatar
    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  

  6. #6

    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  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in