Jeśli mam datę 01.01.2009, chcę dowiedzieć się, który to był dzień, np. Poniedziałek, wtorek itp.
Czy jest w tym wbudowana funkcja SQL Server 2005/2008? Czy też muszę użyć stołu pomocniczego?
sql
sql-server
datetime
koń bez imienia
źródło
źródło
Odpowiedzi:
Użyj
DATENAME
lubDATEPART
:źródło
Mimo że odpowiedź SQLMenace została zaakceptowana, jest jedna ważna
SET
opcja, o której powinieneś wiedziećDATENAME zwróci poprawną nazwę daty, ale nie tę samą wartość DATEPART, jeśli pierwszy dzień tygodnia został zmieniony, jak pokazano poniżej.
źródło
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
. Niedziela będzie zawsze zero.DayOfWeek
wyliczenie maDayOfWeek.Sunday
o wartości ...0
. Tak więc, bez względu na to, coDateFirst
zostanie ustawione, nieprzetworzonaWEEKDAY
wartość zwrócona przez SQL nigdy nie będzie zgodna z odpowiednikiem .NET. Yay, Microsoft.źródło
select datename(dw,getdate())
Aby uzyskać wartość deterministyczną dla dnia tygodnia dla danej daty, można użyć kombinacji DATEPART () i @@ datefirst . W przeciwnym razie zależy to od ustawień na serwerze.
Sprawdź lepsze strony: MS SQL: Dzień tygodnia
Dzień tygodnia będzie wtedy w zakresie od 0 do 6, gdzie 0 to niedziela, 1 to poniedziałek itp. Następnie możesz użyć prostej instrukcji przypadku, aby zwrócić poprawną nazwę dnia tygodnia.
źródło
EUROPA:
źródło
Z SQL Server 2012 i nowszymi możesz korzystać z tej
FORMAT
funkcjiźródło
to jest kopia robocza mojego kodu sprawdź, jak pobrać nazwę dnia od daty w sql
źródło
Jeśli nie chcesz polegać
@@DATEFIRST
lub używaćDATEPART(weekday, DateColumn)
, po prostu sam oblicz dzień tygodnia.Dla tygodni opartych na poniedziałku (Europa) najprostszym jest:
W przypadku niedzielnych tygodni (Ameryka) użyj:
Zwraca liczbę dni tygodnia (od 1 do 7) od 1 stycznia odpowiednio 7, 1753.
źródło
Możesz użyć,
DATEPART(dw, GETDATE())
ale pamiętaj, że wynik będzie zależał od@@DATEFIRST
wartości ustawienia serwera SQL, która jest ustawieniem pierwszego dnia tygodnia (w Europie wartość domyślna 7, czyli niedziela).Jeśli chcesz zmienić pierwszy dzień tygodnia na inną wartość, możesz użyć
SET DATEFIRST
tej opcji, ale może to wpłynąć na wszędzie w sesji zapytania, których nie chcesz.Alternatywnym sposobem jest jawne określenie wartości pierwszego dnia tygodnia jako parametru i unikanie tego w zależności od
@@DATEFIRST
ustawienia. W razie potrzeby możesz użyć następującej formuły:gdzie
@WeekStartDay
jest pierwszy dzień tygodnia, jaki chcesz dla swojego systemu (od 1 do 7, co oznacza od poniedziałku do niedzieli).Zawinąłem go w funkcję poniżej, abyśmy mogli go łatwo ponownie użyć:
Przykładowe użycie:
GetDayInWeek('2019-02-04 00:00:00', 1)
Jest to równoważne z następującymi (ale niezależnymi od ustawienia DATEFIRST serwera SQL):
źródło
Ta wersja może być przydatna.
źródło