439 Stimmen

Abrufen des Wochentags in SQL Server 2005/2008

Wenn ich ein Datum 01/01/2009 habe, möchte ich herausfinden, welcher Tag es war, z. B. Montag, Dienstag usw.

Gibt es in SQL Server 2005/2008 eine eingebaute Funktion für diese Aufgabe? Oder muss ich eine Hilfstabelle verwenden?

10voto

Chris Stillwell Punkte 9801

Ab SQL Server 2012 können Sie mit der FORMAT Funktion

SELECT FORMAT(GETDATE(), 'dddd')

4voto

Minh Nguyen Punkte 1940

Sie können verwenden DATEPART(dw, GETDATE()) aber beachten Sie, dass das Ergebnis von der Einstellung des SQL-Servers abhängt @@DATEFIRST Wert, der die Einstellung des ersten Wochentags darstellt (in Europa ist der Standardwert 7, also Sonntag).

Wenn Sie den ersten Tag der Woche auf einen anderen Wert ändern möchten, können Sie SET DATEFIRST aber dies kann sich auf alle Bereiche Ihrer Abfragesitzung auswirken, was Sie nicht wollen.

Eine Alternative ist die explizite Angabe des Wertes für den ersten Wochentag als Parameter und die Vermeidung der Abhängigkeit von @@DATEFIRST Einstellung. Sie können die folgende Formel verwenden, um dies zu erreichen:

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

donde @WeekStartDay ist der erste Tag der Woche, den Sie für Ihr System wünschen (von 1 bis 7, also von Montag bis Sonntag).

Ich habe sie in die folgende Funktion verpackt, damit wir sie leicht wiederverwenden können:

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

Beispiel für die Verwendung: GetDayInWeek('2019-02-04 00:00:00', 1)

Sie entspricht dem Folgenden (aber unabhängig von der DATEFIRST-Einstellung des SQL-Servers):

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

3voto

Tapan kumar Punkte 6180

Dies ist eine Arbeitskopie meines Codes überprüfen Sie es, wie man Tag Name von Datum in Sql abrufen

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

2voto

Michel de Ruiter Punkte 6109

Wenn Sie nicht abhängig sein wollen von @@DATEFIRST oder verwenden DATEPART(weekday, DateColumn) Berechnen Sie den Wochentag einfach selbst.

Für montagsbasierte Wochen (Europa) ist das einfachste:

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

Für Wochen mit Sonntagsbezug (Amerika) verwenden:

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

Dies gibt die Wochentagszahl (1 bis 7) seit dem 1. bzw. 7. Januar 1753 wieder.

1voto

Sathish Punkte 31

Zusätzlich zu allen obigen Antworten steht dw für Week Day

SELECT DATENAME(WEEKDAY,GETDATE()) AS WeekDay

ou

SELECT DATENAME(W,GETDATE()) AS WeekDay

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X