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

6 funkcji do pobrania dnia, miesiąca i roku z daty w SQL Server

Transact-SQL zawiera szereg funkcji, które pomagają nam pracować z datami i godzinami. Jednym z częstszych zadań podczas pracy z datami jest wyodrębnianie różnych części daty. Na przykład czasami chcemy tylko roku lub miesiąca. Innym razem możemy chcieć dzień tygodnia. Tak czy inaczej, w SQL Server można to zrobić na wiele sposobów.

W szczególności poniższe funkcje pozwalają na zwrócenie dnia, miesiąca i roku od daty w SQL Server.

  • DAY() , MONTH() i YEAR()
  • DATEPART()
  • DATENAME()
  • FORMAT()

Funkcje te wyjaśniono poniżej.

Funkcje DZIEŃ(), MIESIĄC() i ROK()

Najbardziej oczywistym sposobem na zwrócenie dnia, miesiąca i roku od daty jest użycie funkcji T-SQL o tej samej nazwie. Tak, T-SQL ma funkcje zbudowane specjalnie w celu zwracania tych trzech części daty.

Oto przykład ich działania:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DAY(@date) AS DAY,
    MONTH(@date) AS MONTH,
    YEAR(@date) AS YEAR;

Wynik:

+-------+---------+--------+
| DAY   | MONTH   | YEAR   |
|-------+---------+--------|
| 2     | 6       | 2018   |
+-------+---------+--------+

Te funkcje zwracają datepart jako liczbę całkowitą. Zwracają ten sam wynik, co DATEPART() funkcja zwraca dla określonej części daty.

Funkcja DATEPART()

DATEPART() funkcja została zbudowana specjalnie do zwracania określonych części daty. Dlatego możemy użyć tej funkcji, aby zwrócić dokładnie ten sam wynik, co w poprzednim przykładzie:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATEPART(day, @date) AS DAY,
    DATEPART(weekday, @date) AS WEEKDAY,
    DATEPART(month, @date) AS MONTH,
    DATEPART(year, @date) AS YEAR;

Wynik:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | 7         | 6       | 2018   |
+-------+-----------+---------+--------+

Jedną z zalet korzystania z tej funkcji jest możliwość zwrócenia innych części daty i godziny. Jak widać na tym przykładzie, zwróciłem zarówno dzień tygodnia, jak i dzień (day to dzień miesiąca, weekday to dzień tygodnia). Możesz również zwrócić różne części czasu, takie jak minuty, sekundy, milisekundy itp. Aby uzyskać więcej przykładów, zobacz DATEPART() Przykłady w SQL Server.

DATEPART() funkcja zwraca swój wynik jako liczbę całkowitą, dlatego nie będzie można uzyskać nazwy miesiąca ani nazwy dnia tygodnia z daty. Ale nie martw się, możesz użyć DATENAME() lub FORMAT() funkcje do tego.

Funkcja DATENAME()

DATENAME() funkcja jest podobna do DATEPART() funkcja, z wyjątkiem tego, że zwraca wynik w postaci ciągu znaków zamiast liczby całkowitej. DATENAME() zwraca również miesiąc i dzień tygodnia jako ich pełną nazwę, a nie ich wartość liczbową.

Przykład:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATENAME(day, @date) AS DAY,
    DATENAME(weekday, @date) AS WEEKDAY,
    DATENAME(month, @date) AS MONTH,
    DATENAME(year, @date) AS YEAR;

Wynik:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | Saturday  | June    | 2018   |
+-------+-----------+---------+--------+

Aby uzyskać więcej przykładów tej funkcji, zobacz DATENAME() Przykłady w SQL Server.

Funkcja FORMAT()

Możemy użyć FORMAT() funkcja zwracająca te same wartości, co w przypadku DATENAME() funkcja i nie tylko.

Jest to bardziej wszechstronna funkcja niż poprzednie. Pozwala na formatowanie daty/czasu oraz wartości numerycznych jako ciągów. Zwracana wartość to nvarchar lub null (w zależności od danych wejściowych), a długość ciągu jest określona przez określony format.

FORMAT() zapewnia również więcej opcji prezentowania części daty. Możesz określić, czy wyświetlać go jako pojedynczy znak, dwa znaki, trzy, cztery, a w niektórych przypadkach nawet pięć.

Oto przykłady do zademonstrowania.

Dzień

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS d,
    FORMAT(@date, 'dd') AS dd,
    FORMAT(@date, 'ddd') AS ddd,
    FORMAT(@date, 'dddd') AS dddd;

Wynik:

+-----+------+-------+----------+
| d   | dd   | ddd   | dddd     |
|-----+------+-------+----------|
| 2   | 02   | Sat   | Saturday |
+-----+------+-------+----------+

Miesiąc

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'M ') AS M,
    FORMAT(@date, 'MM') AS MM,
    FORMAT(@date, 'MMM') AS MMM,
    FORMAT(@date, 'MMMMM') AS MMMM;

Wynik:

+-----+------+-------+--------+
| M   | MM   | MMM   | MMMM   |
|-----+------+-------+--------|
| 6   | 06   | Jun   | June   |
+-----+------+-------+--------+

Rok

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;

Wynik:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 18  | 18   | 2018  | 2018   | 02018   |
+-----+------+-------+--------+---------+

Zwróć uwagę, że mamy możliwość sformatowania części roku jako pięciu cyfr.

O liczbie cyfr

Podczas zwracania datepart w postaci cyfrowej specyfikator formatu określa minimalną liczbę cyfr do zwrócenia. Na przykład, gdy używasz  yyy , rok zostanie zwrócony jako trzy cyfry, jeśli rok to 0008 ale jako cztery cyfry, jeśli rok to 2008 .

Przykład:

DECLARE @date datetime2 = '0008-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;  

Wynik:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 8   | 08   | 008   | 0008   | 00008   |
+-----+------+-------+--------+---------+

Również przy użyciu pojedynczej opcji (np. d ) jako specyfikator daty, musisz dodać spację, jeśli chcesz, aby ta część daty została zwrócona sama. Jeśli tego nie zrobisz, dostaniesz więcej niż jedną datę.

Przykład:

DECLARE @date datetime2 = '2008-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS 'Space',
    FORMAT(@date, 'd') AS 'No Space',
    FORMAT(@date, 'M ') AS 'Space',
    FORMAT(@date, 'M') AS 'No Space',
    FORMAT(@date, 'y ') AS 'Space',
    FORMAT(@date, 'y') AS 'No Space';

Wynik:

+---------+------------+---------+------------+---------+------------+
| Space   | No Space   | Space   | No Space   | Space   | No Space   |
|---------+------------+---------+------------+---------+------------|
| 2       | 6/2/2008   | 6       | June 2     | 8       | June 2008  |
+---------+------------+---------+------------+---------+------------+

Więcej informacji FORMAT() przykłady, zobacz Jak formatować datę i godzinę 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. Znajdź jednostki odniesienia w SQL Server:sys.dm_sql_referenced_entities

  2. Jak wykonać zapytanie SQL bez wyświetlania wyników

  3. Jak utworzyć ograniczenie klucza obcego z opcją ON DELETE SET NULL w programie SQL Server — samouczek SQL Server / TSQL, część 81

  4. Jak podzielić ciąg w SQL Server

  5. Tymczasowo wyłącz wszystkie ograniczenia klucza obcego