Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

6 funções para obter o dia, mês e ano de uma data no SQL Server


O Transact-SQL inclui várias funções que nos ajudam a trabalhar com datas e horas. Uma das tarefas mais comuns ao trabalhar com datas é extrair as diferentes partes da data. Por exemplo, às vezes queremos apenas o ano, ou o mês. Outras vezes podemos querer o dia da semana. De qualquer forma, há muitas maneiras de fazer isso no SQL Server.

Em particular, as funções a seguir permitem retornar o dia, mês e ano de uma data no SQL Server.
  • DAY() , MONTH() e YEAR()
  • DATEPART()
  • DATENAME()
  • FORMAT()

Estas funções são explicadas abaixo.


As funções DAY(), MONTH() e YEAR()


A maneira mais óbvia de retornar o dia, mês e ano de uma data é usar as funções T-SQL de mesmo nome. Sim, o T-SQL possui funções criadas especificamente para retornar essas três partes de data.

Veja um exemplo de como eles funcionam:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DAY(@date) AS DAY,
    MONTH(@date) AS MONTH,
    YEAR(@date) AS YEAR;

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

Essas funções retornam o datepart como um inteiro. Eles retornam o mesmo resultado que o DATEPART() função retorna para a parte de data especificada.

A função DATEPART()


O DATEPART() A função foi criada especificamente para retornar partes especificadas de uma data. Portanto, podemos usar esta função para retornar exatamente o mesmo resultado do exemplo anterior:
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;

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

Um benefício de usar esta função é que você também pode retornar outras partes da data e hora. Como você pode ver com este exemplo, eu retornei o dia da semana, bem como o dia (day é o dia do mês, weekday é o dia da semana). Você também pode retornar as várias partes de tempo, como minutos, segundos, milissegundos, etc. Para obter mais exemplos, consulte DATEPART() Exemplos no SQL Server.

O DATEPART() A função retorna seu resultado como um inteiro e, portanto, você não poderá obter o nome do mês ou o nome do dia da semana a partir da data. Mas não se preocupe, você pode usar o comando DATENAME() ou FORMAT() funções para isso.

A função DATENAME()


O DATENAME() função é semelhante à DATEPART() função, exceto que ela retorna o resultado como uma cadeia de caracteres em vez de um inteiro. DATENAME() também retorna mês e dia da semana como seu nome completo, em vez de seu valor numérico.

Exemplo:
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;

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

Para mais exemplos desta função, veja DATENAME() Exemplos no SQL Server.

A função FORMAT()


Podemos usar o FORMAT() função para retornar os mesmos valores que com o DATENAME() função e muito mais.

Esta é uma função mais versátil do que as anteriores. Ele permite formatar data/hora, bem como valores numéricos como strings. O valor de retorno é nvarchar ou null (dependendo da entrada), e o comprimento da string é determinado pelo formato especificado.

FORMAT() também fornece mais opções de como a parte de data é apresentada. Você pode especificar se deseja exibi-lo como um único caractere, dois caracteres, três, quatro e até cinco em alguns casos.

Aqui estão exemplos para demonstrar.

Dia

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;

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

Mês

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;

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

Ano

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;

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

Observe que temos a opção de formatar a parte do ano como cinco dígitos.

Sobre o número de dígitos


Ao retornar uma parte de data em forma de dígito, o especificador de formato determina o número mínimo de dígitos a serem retornados. Por exemplo, ao usar  yyy , o ano será retornado como três dígitos se o ano for 0008 mas como quatro dígitos se o ano for 2008 .

Exemplo:
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;  

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

Além disso, ao usar a opção única (por exemplo, d ) como especificador de data, você precisará adicionar um espaço se quiser apenas que essa parte de data seja retornada por si mesma. Se você não fizer isso, receberá mais do que essa única parte de data.

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

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

Para mais FORMAT() exemplos, consulte Como formatar a data e a hora no SQL Server.