Hirdetés

Új hozzászólás Aktív témák

  • Zalanius

    tag

    válasz mr.nagy #3935 üzenetére

    Az ilyen "rákövetkező hét x. nap" stb. elég mókolós tud lenni, ezért ha nem megy egyből kisujjból, célszerű felírni néhány segédváltozót, azzal elbabrálni, tesztelgetni. Két példa lent:

    -- 1. Olvasmányosan
    DECLARE @bazisnap date = SYSDATETIME();
    DECLARE @napdelta int = 8; -- adjunk hozzá x napot
    DECLARE @celnap int = 6; -- a következő pénteket keressük, a péntek sorszáma 6, ez a skála 1-7 közötti
    DECLARE @eredmeny date;
    -- 8 nap múlva milyen nap lesz?
    DECLARE @x1 int = (SELECT DATEPART(dw, DATEADD(day, @napdelta, @bazisnap)));
    -- Adjuk az deltához a még hiányzó napokat, két eset lehetséges
    IF @x1 > @celnap SET @napdelta = @napdelta + 7 - (@x1 - @celnap); ELSE SET @napdelta = @napdelta + @celnap - @x1;
    SET @eredmeny = DATEADD(day, @napdelta, @bazisnap);
    -- Ellenőrizhető az összes részszámítás is, ha kell
    SELECT @eredmeny, @napdelta, @x1;


    -- 2. Kevésbé olvasmányosan
    SELECT CASE WHEN DATEPART(dw, DATEADD(day, 8, SYSDATETIME())) <= 6 THEN CONVERT(date, DATEADD(day, 8 + 6 - DATEPART(dw, DATEADD(day, 8, SYSDATETIME())), SYSDATETIME()))
    ELSE CONVERT(date, DATEADD(day, 8 + 7 - (DATEPART(dw, DATEADD(day, 8, SYSDATETIME())) - 6), SYSDATETIME()))
    END;

Új hozzászólás Aktív témák