Wenn ich ein Datum vom 01.01.2009 habe, möchte ich herausfinden, welcher Tag es war, z. B. Montag, Dienstag usw.
Gibt es hierfür eine integrierte Funktion in SQL Server 2005/2008? Oder muss ich einen Hilfstisch verwenden?
sql
sql-server
datetime
ein Pferd ohne Name
quelle
quelle
Antworten:
Verwenden Sie
DATENAME
oderDATEPART
:quelle
Obwohl die Antwort von SQLMenace akzeptiert wurde, gibt es eine wichtige
SET
Option, die Sie kennen solltenDATENAME wird korrektes Datum zurückgeben Namen aber nicht den gleichen DATEPART Wert , wenn der erste Tag der Woche geändert wurde , wie unten dargestellt.
quelle
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
. Der Sonntag wird immer Null sein.DayOfWeek
Aufzählung von .NETDayOfWeek.Sunday
einen Wert von .... hat0
. Unabhängig davon, worauf festgelegtDateFirst
ist, ist ein unbehandelter SQL-zurückgegebenerWEEKDAY
Wert niemals mit dem .NET-Gegenstück kompatibel. Ja, Microsoft.quelle
select datename(dw,getdate())
Um einen deterministischen Wert für den Wochentag für ein bestimmtes Datum zu erhalten, können Sie eine Kombination aus DATEPART () und @@ datefirst verwenden . Ansonsten sind Sie abhängig von den Einstellungen auf dem Server.
Auf der folgenden Website finden Sie eine bessere Lösung: MS SQL: Wochentag
Der Wochentag liegt dann im Bereich von 0 bis 6, wobei 0 Sonntag, 1 Montag usw. ist. Anschließend können Sie mithilfe einer einfachen case-Anweisung den richtigen Wochentagsnamen zurückgeben.
quelle
EUROPA:
quelle
Ab SQL Server 2012 können Sie die
FORMAT
Funktion verwendenquelle
Dies ist eine Arbeitskopie meines Codes. Überprüfen Sie, wie Sie den Tagesnamen vom Datum in SQL abrufen können
quelle
Wenn Sie nicht abhängig sein
@@DATEFIRST
oder verwenden möchtenDATEPART(weekday, DateColumn)
, berechnen Sie einfach den Wochentag selbst.Für montagsbasierte Wochen (Europa) ist am einfachsten:
Für Sonntagswochen (Amerika) verwenden Sie:
Dies gibt die Wochentagsnummer (1 bis 7) seit dem 1. Januar bzw. dem 7. Januar 1753 zurück.
quelle
Sie können verwenden,
DATEPART(dw, GETDATE())
aber beachten Sie, dass das Ergebnis vom SQL Server-Einstellungswert@@DATEFIRST
abhängt, der der erste Wochentag ist (in Europa ist der Standardwert 7 der Sonntag).Wenn Sie den ersten Wochentag in einen anderen Wert ändern möchten, können Sie ihn verwenden.
SET DATEFIRST
Dies kann sich jedoch auf alle Bereiche Ihrer Abfragesitzung auswirken, die Sie nicht möchten.Alternativ können Sie den Wert für den ersten Wochentag explizit als Parameter angeben und je nach
@@DATEFIRST
Einstellung vermeiden . Sie können die folgende Formel verwenden, um dies bei Bedarf zu erreichen:Wo
@WeekStartDay
ist der erste Wochentag, den Sie für Ihr System wünschen (von 1 bis 7, dh von Montag bis Sonntag)?Ich habe es in die folgende Funktion eingewickelt, damit wir es leicht wiederverwenden können:
Anwendungsbeispiel:
GetDayInWeek('2019-02-04 00:00:00', 1)
Dies entspricht den folgenden Einstellungen (unabhängig von der Einstellung DATEFIRST des SQL-Servers):
quelle
Sie können diese Version nützlich finden.
quelle