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%
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
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 FORMAT
gebruiken
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 @@DATEFIRST
of 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 DATEFIRST
gebruiken, 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 @WeekStartDay
de 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