sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att få månadsnamnet från ett datum i SQL Server (T-SQL)

När du använder SQL Server har du några olika alternativ när du behöver returnera månadsnamnet från ett datum med T-SQL. Med månadsnamn talar jag inte om månadsnumret (som 07 ). Jag pratar om månadens fullständiga namn (som juli ).

Till exempel när det ges ett datum 2018-07-01 , du vill ha juli ska returneras.

Den här artikeln presenterar tre sätt att returnera månadsnamnet från ett datum i SQL Server med T-SQL.

FORMAT()-funktionen

FORMAT() funktion returnerar ett värde formaterat i det angivna formatet och valfri kultur. Du kan använda den för att returnera månadsnamnet från ett datum.

Här är ett exempel:

DECLARE @date datetime2 = '2018-07-01';
SELECT FORMAT(@date, 'MMMM') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| July     |
+----------+

I det här fallet tillhandahöll vi en formatsträng av MMMM som är en anpassad datum- och tidsformatsträng för att returnera månadsnamnet.

Det som är bra med FORMAT() funktion är att den accepterar ett valfritt argument som låter dig specificera vilken kultur som ska användas.

Här är några exempel:

DECLARE @date datetime2 = '2018-07-01';
SELECT 
    FORMAT(@date, 'MMMM', 'en-US') AS 'en-US',
    FORMAT(@date, 'MMMM', 'es-es') AS 'es-es',
    FORMAT(@date, 'MMMM', 'de-de') AS 'de-de',
    FORMAT(@date, 'MMMM', 'zh-cn') AS 'zh-cn';

Resultat:

+---------+---------+---------+---------+
| en-US   | es-es   | de-de   | zh-cn   |
|---------+---------+---------+---------|
| July    | julio   | Juli    | 七月    |
+---------+---------+---------+---------+

Om du inte tillhandahåller kulturargumentet används språket för den aktuella sessionen. Om du inte är säker på vilket språk den aktuella sessionen använder, här är 3 sätt att få språket för den aktuella sessionen. Om du upptäcker att du behöver ändra språket, så här ställer du in det till ett annat språk.

Du kan också använda FORMAT() funktion för att få det förkortade månadsnamnet. För att göra detta, använd helt enkelt MMM (tre M s istället för fyra).

Här är ett exempel som returnerar både det förkortade månadsnamnet och hela månadsnamnet:

DECLARE @date datetime2(0) = '2028-09-01';
SELECT 
    FORMAT(@date, 'MMM', 'en-US') 'en-US',
    FORMAT(@date, 'MMM', 'es-es') 'es-es',
    FORMAT(@date, 'MMM', 'it') 'it'
UNION ALL
SELECT 
    FORMAT(@date, 'MMMM', 'en-US'),
    FORMAT(@date, 'MMMM', 'es-es'),
    FORMAT(@date, 'MMMM', 'it');

Resultat:

+-----------+------------+-----------+
| en-US     | es-es      | it        |
|-----------+------------+-----------|
| Sep       | sep.       | set       |
| September | septiembre | settembre |
+-----------+------------+-----------+

Detta är bara ett av många sätt att få det förkortade månadsnamnet från ett datum (även om den här metoden utan tvekan är den bästa). Det finns ytterligare minst fyra sätt du kan returnera det förkortade månadsnamnet från ett datum.

DATUMNAMN()-funktionen

DATENAME() funktionen liknar DATEPART() funktion, förutom att den returnerar namnet av den angivna datumdelen (men endast där ett namn är tillämpligt). Det betyder att den returnerar veckodagens namn eller månadsnamnet om det är vad du behöver.

Så här får du månadsnamnet med den här funktionen:

DECLARE @date datetime2 = '2018-07-01';
SELECT DATENAME(month, @date) AS Result;

Resultat:

+----------+
| Result   |
|----------|
| July     |
+----------+

MONTHNAME() ODBC-skalärfunktionen

Det finns en ODBC-skalär funktion specifikt för att returnera månadsnamnet från ett datum. Dess namn är MONTHNAME() , och det går så här:

DECLARE @date datetime2 = '2018-07-01';
SELECT {fn MONTHNAME(@date)} AS Result;

Resultat:

+----------+
| Result   |
|----------|
| July     |
+----------+

När du använder skalära ODBC-funktioner i T-SQL är de omgivna av klammerparenteser ({} ) och funktionsnamnet har prefixet fn .

Om du behöver få det korta månadsnamnet, se 5 sätt att få det korta månadsnamnet från ett datum i SQL Server.


  1. SQL Server Update Databas Statistics

  2. Kontrollera en tabell för tidsöverlappning?

  3. java.sql.SQLEundantag:- ORA-01000:maximala öppna markörer har överskridits

  4. 7 saker att se upp med i din PostgreSQL-distribution