Dag van de week ophalen in SQL Server 2005/2008

Als ik een datum heb 01/01/2009, wil ik weten welke dag het was, b.v. Maandag, dinsdag, enz…

Is hier een ingebouwde functie voor in SQL Server 2005/2008? Of moet ik een hulptabel gebruiken?


Antwoord 1, autoriteit 100%

Gebruik DATENAMEof DATEPART:

SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6

Antwoord 2, autoriteit 13%

Hoewel het antwoord van SQLMenace’s antwoordis geaccepteerd, is er één belangrijke SET-optie die u moet gebruiken let op

STEL DATEFIRST IN

DATENAMEzal terugkeren correcte datum naammaar niet dezelfde DATEPARTwaarde als de eerste dag van de week is gewijzigd zoals hieronder geïllustreerd.

declare @DefaultDateFirst int
set @DefaultDateFirst = @@datefirst
--; 7 First day of week is "Sunday" by default
select  [@DefaultDateFirst] = @DefaultDateFirst 
set datefirst @DefaultDateFirst
select datename(dw,getdate()) -- Saturday
select datepart(dw,getdate()) -- 7
--; Set the first day of week to * TUESDAY * 
--; (some people start their week on Tuesdays...)
set datefirst 2
select datename(dw,getdate()) -- Saturday
--; Returns 5 because Saturday is the 5th day since Tuesday.
--; Tue 1, Wed 2, Th 3, Fri 4, Sat 5
select datepart(dw,getdate()) -- 5 <-- It's not 7!
set datefirst @DefaultDateFirst

Antwoord 3, autoriteit 4%

SELECT  CASE DATEPART(WEEKDAY,GETDATE())  
    WHEN 1 THEN 'SUNDAY' 
    WHEN 2 THEN 'MONDAY' 
    WHEN 3 THEN 'TUESDAY' 
    WHEN 4 THEN 'WEDNESDAY' 
    WHEN 5 THEN 'THURSDAY' 
    WHEN 6 THEN 'FRIDAY' 
    WHEN 7 THEN 'SATURDAY' 
END

Antwoord 4, autoriteit 2%

EUROPA:

declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);

Antwoord 5, autoriteit 2%

Om een deterministische waarde voor de dag van de week voor een bepaalde datum te krijgen, kunt u een combinatie van DATEPART()en @@datefirst. Anders ben je afhankelijk van de instellingen op de server.

Bekijk de volgende site voor een betere oplossing:
MS SQL: dag van de week

De dag van de week ligt dan tussen 0 en 6, waarbij 0 zondag is, 1 maandag, enz. Dan kunt u een eenvoudige case-statement gebruiken om de juiste naam van de weekdag terug te geven.


Antwoord 6

Met SQL Server 2012 en hoger kunt u de functie FORMATgebruiken

SELECT FORMAT(GETDATE(), 'dddd')

Antwoord 7

dit is een werkkopie van mijn code, controleer het, hoe de dagnaam op te halen van de datum in sql

CREATE Procedure [dbo].[proc_GetProjectDeploymentTimeSheetData] 
@FromDate date,
@ToDate date
As 
Begin
select p.ProjectName + ' ( ' + st.Time +' '+'-'+' '+et.Time +' )' as ProjectDeatils,
datename(dw,pts.StartDate) as 'Day'
from 
ProjectTimeSheet pts 
join Projects p on pts.ProjectID=p.ID 
join Timing st on pts.StartTimingId=st.Id
join Timing et on pts.EndTimingId=et.Id
where pts.StartDate >= @FromDate
and pts.StartDate <= @ToDate
END

Antwoord 8

Als je niet afhankelijk wilt zijn van @@DATEFIRSTof DATEPART(weekday, DateColumn)wilt gebruiken, bereken dan zelf de dag van de week.

Voor weken op maandag (Europa) is het eenvoudigst:

SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay

Voor weken op zondag (Amerika) gebruik:

SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay

Hiermee wordt het weekdagnummer (1 t/m 7) geretourneerd sinds 1 respectievelijk 7 januari 1753.


Antwoord 9

U kunt DATEPART(dw, GETDATE())gebruiken, maar houd er rekening mee dat het resultaat afhankelijk is van de waarde van de SQL-serverinstelling @@DATEFIRST, de eerste dag van weekinstelling (In Europa is de standaardwaarde 7 zondag).

Als u de eerste dag van de week naar een andere waarde wilt wijzigen, kunt u SET DATEFIRSTgebruiken, maar dit kan overal in uw querysessie van invloed zijn die u niet wilt.

Een alternatieve manier is om expliciet de waarde van de eerste dag van de week als parameter op te geven en te vermijden afhankelijk te zijn van de instelling van @@DATEFIRST. U kunt de volgende formule gebruiken om dat te bereiken wanneer dat nodig is:

(DATEPART(dw, GETDATE()) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1

waarbij @WeekStartDayde eerste dag van de week is die u voor uw systeem wilt (van 1 tot 7, wat betekent van maandag tot zondag).

Ik heb het in onderstaande functie verpakt, zodat we het gemakkelijk kunnen hergebruiken:

CREATE FUNCTION [dbo].[GetDayInWeek](@InputDateTime DATETIME, @WeekStartDay INT)
RETURNS INT
AS
BEGIN
    --Note: @WeekStartDay is number from [1 - 7] which is from Monday to Sunday
    RETURN (DATEPART(dw, @InputDateTime) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1 
END

Voorbeeld van gebruik:
GetDayInWeek('2019-02-04 00:00:00', 1)

Het komt overeen met het volgende (maar onafhankelijk van de DATEFIRST-instelling van de SQL-server):

SET DATEFIRST 1
DATEPART(dw, '2019-02-04 00:00:00')

Antwoord 10

Misschien vindt u deze versie nuttig.

-- Test DATA
select @@datefirst
create table #test (datum datetime)
insert #test values ('2013-01-01')
insert #test values ('2013-01-02')
insert #test values ('2013-01-03')
insert #test values ('2013-01-04')
insert #test values ('2013-01-05')
insert #test values ('2013-01-06')
insert #test values ('2013-01-07')
insert #test values ('2013-01-08')
-- Test DATA
select  Substring('Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun,Mon,Tue,Wed,Thu,Fri,Sat',
        (DATEPART(WEEKDAY,datum)+@@datefirst-1)*4+1,3),Datum
        from #test 

Other episodes