sql >> Databáze >  >> RDS >> Sqlserver

6 Funkce pro získání dne, měsíce a roku z data na serveru SQL

Transact-SQL obsahuje spoustu funkcí, které nám pomáhají pracovat s daty a časy. Jedním z běžnějších úkolů při práci s daty je extrahování různých částí data. Například někdy chceme jen rok nebo měsíc. Jindy bychom mohli chtít den v týdnu. Ať tak či onak, existuje mnoho způsobů, jak to provést na serveru SQL Server.

Zejména následující funkce umožňují vrátit den, měsíc a rok od data na serveru SQL.

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

Tyto funkce jsou vysvětleny níže.

Funkce DAY(), MONTH() a YEAR()

Nejviditelnějším způsobem, jak vrátit den, měsíc a rok z data, je použití stejnojmenných funkcí T-SQL. Ano, T-SQL má funkce vytvořené speciálně pro účely vracení těchto tří částí data.

Zde je příklad, jak fungují:

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

Výsledek:

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

Tyto funkce vrátí datepart jako celé číslo. Vracejí stejný výsledek jako DATEPART() funkce vrací pro zadanou část data.

Funkce DATEPART()

DATEPART() funkce byla vytvořena speciálně pro vracení specifikovaných částí data. Proto můžeme pomocí této funkce vrátit přesně stejný výsledek jako v předchozím příkladu:

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;

Výsledek:

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

Jednou z výhod použití této funkce je, že můžete vrátit i jiné části data a času. Jak můžete vidět na tomto příkladu, vrátil jsem den v týdnu i den (day je den v měsíci, weekday je den v týdnu). Můžete také vrátit různé části času, jako jsou minuty, sekundy, milisekundy atd. Další příklady viz DATEPART() Příklady v SQL Server.

DATEPART() funkce vrátí výsledek jako celé číslo, a proto z data nebudete moci získat název měsíce nebo název dne v týdnu. Ale nebojte se, můžete použít DATENAME() nebo FORMAT() funkce pro to.

Funkce DATENAME()

DATENAME() funkce je podobná funkci DATEPART() funkce, kromě toho, že vrací výsledek jako znakový řetězec namísto celého čísla. DATENAME() také vrátí měsíc a den v týdnu jako jejich celé jméno, nikoli jejich číselnou hodnotu.

Příklad:

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;

Výsledek:

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

Další příklady této funkce naleznete v části DATENAME() Příklady v SQL Server.

Funkce FORMAT()

Můžeme použít FORMAT() funkce vrátit stejné hodnoty jako u DATENAME() funkce a další.

Jedná se o všestrannější funkci než předchozí. Umožňuje formátovat datum/čas a také číselné hodnoty jako řetězce. Vrácená hodnota je buď nvarchar nebo null (v závislosti na vstupu) a délka řetězce je určena zadaným formátem.

FORMAT() také poskytuje více možností, jak je datová část prezentována. Můžete určit, zda se má zobrazit jako jeden znak, dva znaky, tři, čtyři a v některých případech dokonce pět.

Zde jsou příklady k demonstraci.

Den

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;

Výsledek:

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

Měsí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;

Výsledek:

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

Výsledek:

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

Všimněte si, že máme možnost formátovat část roku jako pět číslic.

O počtu číslic

Při vrácení části data ve formě číslic určuje specifikátor formátu minimální počet vrácených číslic. Například při použití  yyy , rok bude vrácen jako tři číslice, pokud je rok 0008 ale jako čtyři číslice, pokud je rok 2008 .

Příklad:

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;  

Výsledek:

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

Také při použití jediné možnosti (např. d ) jako specifikátor data, budete muset přidat mezeru, pokud chcete, aby se tato část data vrátila sama. Pokud to neuděláte, získáte více než jen jednu část data.

Příklad:

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

Výsledek:

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

Další informace FORMAT() příklady viz Jak formátovat datum a čas na serveru SQL.


  1. Změňte kódování databáze PostgreSql

  2. isnumeric() s PostgreSQL

  3. Now() bez časového pásma

  4. Škálování vaší databáze časových řad – Jak jednoduše škálovat TimescaleDB