Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

3 sposoby na uzyskanie nazwy miesiąca z daty w SQL Server (T-SQL)

Korzystając z SQL Server, masz kilka różnych opcji, gdy musisz zwrócić nazwę miesiąca od daty przy użyciu T-SQL. Według nazwy miesiąca nie mówię o numerze miesiąca (np. 07 ). Mówię o pełnej nazwie miesiąca (np. lipiec ).

Na przykład, gdy podano datę 2018-07-01 , chcesz lipiec do zwrotu.

W tym artykule przedstawiono trzy sposoby na zwrócenie nazwy miesiąca z daty w SQL Server przy użyciu T-SQL.

Funkcja FORMAT()

FORMAT() funkcja zwraca wartość sformatowaną w określonym formacie i opcjonalnej kulturze. Możesz go użyć do zwrócenia nazwy miesiąca od daty.

Oto przykład:

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

Wynik:

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

W tym przypadku udostępniliśmy ciąg formatu MMMM który jest niestandardowym ciągiem formatu daty i godziny do zwracania nazwy miesiąca.

Dobra rzecz w FORMAT() funkcja polega na tym, że akceptuje opcjonalny argument, który pozwala określić kulturę do użycia.

Oto kilka przykładów:

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';

Wynik:

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

Jeśli nie podasz argumentu kultury, używany jest język bieżącej sesji. Jeśli nie masz pewności, jakiego języka używa bieżąca sesja, oto 3 sposoby uzyskania języka bieżącej sesji. Jeśli okaże się, że musisz zmienić język, oto jak ustawić go na inny język.

Możesz także użyć FORMAT() funkcja, aby uzyskać skróconą nazwę miesiąca. Aby to zrobić, po prostu użyj MMM (trzy M s zamiast czterech).

Oto przykład, który zwraca zarówno skróconą nazwę miesiąca, jak i pełną nazwę miesiąca:

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');

Wynik:

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

To tylko jeden z wielu sposobów uzyskania skróconej nazwy miesiąca z daty (chociaż ta metoda jest prawdopodobnie najlepsza). Istnieją jeszcze co najmniej cztery sposoby na zwrócenie skróconej nazwy miesiąca od daty.

Funkcja DATENAME()

DATENAME() funkcja jest podobna do DATEPART() funkcja, z wyjątkiem tego, że zwraca nazwę określonej części daty (ale tylko wtedy, gdy ma zastosowanie nazwa). Oznacza to, że zwraca nazwę dnia tygodnia lub nazwę miesiąca, jeśli tego potrzebujesz.

Oto jak uzyskać nazwę miesiąca za pomocą tej funkcji:

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

Wynik:

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

Funkcja skalarna ODBC MONTHNAME()

Istnieje funkcja skalarna ODBC przeznaczona specjalnie do zwracania nazwy miesiąca z daty. Jego nazwa to MONTHNAME() i wygląda to tak:

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

Wynik:

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

Podczas używania funkcji skalarnych ODBC w T-SQL, są one otoczone nawiasami klamrowymi ({} ) a nazwa funkcji jest poprzedzona przedrostkiem fn .

Jeśli chcesz uzyskać skróconą nazwę miesiąca, zobacz 5 sposobów uzyskania skróconej nazwy miesiąca z daty w SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W SQL Server, jak mogę zablokować pojedynczy wiersz w sposób podobny do Oracle SELECT FOR UPDATE WAIT?

  2. Ograniczenie unikatowe SQL w wielu tabelach

  3. SQL Server FOR XML Path tworzy powtarzające się węzły

  4. Java JDBC:daty konsekwentnie dwa dni wolne

  5. Czy kolejność Sql JOIN wpływa na wydajność?