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?
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?
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')
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
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.
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.