Někdy při práci se serverem SQL Server (nebo jakýmkoliv jiným DBMS) musíte vrátit krátký název na měsíc. Myslím tím 3písmennou zkratku měsíce. Například potřebujete „prosinec“ místo „prosinec“.
Zde jsou čtyři způsoby, jak můžete extrahovat zkrácený název měsíce z data na serveru SQL.
Funkce FORMAT()
FORMAT()
Funkce je dostupná od SQL Server 2012 a je to nejvýstižnější způsob, jak vrátit měsíc jako třípísmennou zkratku.
Zde je příklad, jak to funguje:
DECLARE @date datetime2 = '2000-01-01'; SELECT FORMAT(@date, 'MMM') AS 'FORMAT';
Výsledek:
FORMAT ------ Jan
První řádek jednoduše deklaruje proměnnou a přiřadí k ní datum. Na druhém řádku vracíme krátký název měsíce z data.
Funkce CAST() a DATENAME()
Tato možnost přetypuje datum jako CHAR(3)
, čímž se odříznou všechny znaky, které následují po prvních třech.
Zde je příklad:
DECLARE @date datetime2 = '2000-01-01'; SELECT CAST(DATENAME(month, @date) AS CHAR(3)) AS 'CAST/DATENAME';
Výsledek:
CAST/DATENAME ------------- Jan
Funkce LEFT() a DATENAME()
Tato možnost je podobná předchozí, kromě toho, že používá LEFT()
funkce, která převezme 3 znaky nejvíce vlevo od data.
Příklad:
DECLARE @date datetime2 = '2000-01-01'; SELECT LEFT(DATENAME(month, @date), 3) AS 'LEFT/DATENAME';
Výsledek:
LEFT/DATENAME ------------- Jan
Funkce LEFT() a CONVERT()
Tato možnost převede datum na varchar a poté vezme první tři znaky.
Příklad:
DECLARE @date datetime2 = '2000-01-01'; SELECT LEFT(CONVERT(varchar, @date, 100), 3) AS 'LEFT/CONVERT';
Výsledek:
LEFT/CONVERT ------------ Jan
V tomto příkladu 100
argument stylizuje datum tak, aby bylo v následujícím formátu:po dd yyyy hh:miAM (nebo PM) . Takže v našem případě je datum ve stylu 1. ledna 2000 00:00 .
Odtud je to jednoduše otázka odstřižení prvních tří písmen pomocí LEFT()
funkce.
Funkce LEFT() a MONTHNAME()
Tato možnost používá MONTHNAME()
Skalární funkce ODBC pro vrácení názvu měsíce. A stejně jako v předchozích dvou příkladech jednoduše extrahujeme první tři písmena názvu daného měsíce.
Příklad:
DECLARE @date datetime2 = '2000-01-01'; SELECT LEFT({fn MONTHNAME(@date)}, 3) AS 'LEFT/MONTHNAME';
Výsledek:
LEFT/MONTHNAME -------------- Jan