sql >> Databáze >  >> RDS >> Sqlserver

Získejte určitý den v týdnu v týdnu daný datem DATETIME

S hodnotami data a času musíte být velmi opatrní! Zejména index dne je složitý. Vždy byste měli myslet na kulturní rozdíly:

--The first of January was a Friday in 2016
DECLARE @testDate DATE = {d'2016-01-01'};

--Zkouším to s německou kulturou, začíná to v pondělí

SET LANGUAGE GERMAN;
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in Germany the Friday was 5th day

--Nyní to samé s anglickou kulturou, od neděle

SET LANGUAGE ENGLISH;
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in English culture this is the 6th day

--Tuto kulturu můžete získat nezávislou přidáním těchto hodnot pomocí Modulo 7

SET LANGUAGE GERMAN;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in Germany the Friday was 5th day

SET LANGUAGE ENGLISH;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in English culture this is the 6th day

Nyní oba dotazy vracejí stejnou hodnotu pro pátek, 6 .

Váš příklad ukazuje neděli jako první den v týdnu, takže neděle v týdnu k danému dni by měla být ve skutečnosti 17. července. Váš očekávaný výstup (24. července) je první den následujícího týdne, že?

Zkuste toto:

DECLARE @DayOfWeek TINYINT = 1;
DECLARE @Date DATETIME = '2016-07-21 23:47:11.133';
SELECT CAST(@Date + @DayOfWeek - (@@DATEFIRST + DATEPART(WEEKDAY,@Date)) % 7 AS DATE)



  1. % přihlášení do připraveného prohlášení Java

  2. Jak vytvořit relační tabulky na oboustranném trhu

  3. Odeberte jeden znak z pole varchar SQL Server 2008

  4. Získávání dat z rozevíracího seznamu s více možnostmi pomocí PHP pro vložení do MySQL