Czasami podczas pracy z SQL Server (lub jakimkolwiek innym systemem DBMS) musisz zwrócić skróconą nazwę przez miesiąc. Mam tu na myśli trzyliterowy skrót miesiąca. Na przykład potrzebujesz „grudzień” zamiast „grudzień”.
Oto cztery sposoby wyodrębnienia skróconej nazwy miesiąca z daty w SQL Server.
Funkcja FORMAT()
FORMAT()
funkcja jest dostępna od SQL Server 2012 i jest najbardziej zwięzłym sposobem zwracania miesiąca w postaci trzyliterowego skrótu.
Oto przykład tego, jak to działa:
DECLARE @date datetime2 = '2000-01-01'; SELECT FORMAT(@date, 'MMM') AS 'FORMAT';
Wynik:
FORMAT ------ Jan
Pierwsza linia po prostu deklaruje zmienną i przypisuje jej datę. W drugim wierszu zwracamy skróconą nazwę miesiąca od daty.
Funkcje CAST() i DATENAME()
Ta opcja rzutuje datę jako CHAR(3)
, odcinając w ten sposób wszystkie znaki następujące po pierwszych trzech.
Oto przykład:
DECLARE @date datetime2 = '2000-01-01'; SELECT CAST(DATENAME(month, @date) AS CHAR(3)) AS 'CAST/DATENAME';
Wynik:
CAST/DATENAME ------------- Jan
Funkcje LEFT() i DATENAME()
Ta opcja jest podobna do poprzedniej, z wyjątkiem tego, że używa LEFT()
funkcja, aby pobrać 3 skrajne lewe znaki z daty.
Przykład:
DECLARE @date datetime2 = '2000-01-01'; SELECT LEFT(DATENAME(month, @date), 3) AS 'LEFT/DATENAME';
Wynik:
LEFT/DATENAME ------------- Jan
Funkcje LEFT() i CONVERT()
Ta opcja konwertuje datę na varchar, a następnie pobiera pierwsze trzy znaki.
Przykład:
DECLARE @date datetime2 = '2000-01-01'; SELECT LEFT(CONVERT(varchar, @date, 100), 3) AS 'LEFT/CONVERT';
Wynik:
LEFT/CONVERT ------------ Jan
W tym przykładzie 100
argument stylizuje datę w następujący sposób:pon dd rrrr hh:miAM (lub PM) . W naszym przypadku styl daty to 1 stycznia 2000 12:00 .
Od tego momentu wystarczy odciąć pierwsze trzy litery za pomocą LEFT()
funkcja.
Funkcje LEFT() i MONTHNAME()
Ta opcja używa MONTHNAME()
Funkcja skalarna ODBC zwracająca nazwę miesiąca. Podobnie jak w poprzednich dwóch przykładach, po prostu wyodrębniamy pierwsze trzy litery nazwy tego miesiąca.
Przykład:
DECLARE @date datetime2 = '2000-01-01'; SELECT LEFT({fn MONTHNAME(@date)}, 3) AS 'LEFT/MONTHNAME';
Wynik:
LEFT/MONTHNAME -------------- Jan