sql >> Database >  >> RDS >> Sqlserver

Krijg een bepaalde weekdag binnen een week gegeven door een DATETIME

Met datetime-waarden moet je heel voorzichtig zijn! Vooral de index van een dag is lastig. Je moet altijd denken aan cultuurspecifieke verschillen:

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

--Ik probeer dit met de Duitse cultuur, dit begint met maandag

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

--Nu hetzelfde met de Engelse cultuur, beginnend op zondag

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

--Je kunt deze cultuur onafhankelijk krijgen door die waarden toe te voegen met 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

Nu retourneren beide zoekopdrachten dezelfde waarde voor vrijdag, de 6 .

Uw voorbeeld toont de zondag als eerste dag van de week, dus de zondag van de week tot de gegeven dag zou eigenlijk 17 juli moeten zijn. Je verwachte output (24 juli) is de eerste dag van de volgende week, nietwaar?

Probeer dit:

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. Hoe u alle tabellen met identiteitskolom in SQL Server-database kunt vinden - SQL Server / T-SQL-zelfstudiedeel 45

  2. Oracle krijgt rij waar kolomwaarde is gewijzigd

  3. Filteren op dag van de week

  4. Wat is het verschil tussen MySQL en MySQL2 gezien NodeJS?