terça-feira, 25 de fevereiro de 2020

1- Retornando a data e hora atual

Para executar as consultas abra o SQL Server Management Studio, efetue o login e a seguir clique em New Query ou tecle CTRL+N.

Será aberta a janela para você digitar a consulta T-SQL.

Após digitar clique em Execute e veja o na janela logo abaixo.

Agora vamos ao trabalho:

Para retornar a data e hora atual podemos usar as funções GETDATE, GETUTCDATE, CURRENT_TIMESTAMP, SYSDATETIME, SYSUTCDATETIME, or SYSDATETIMEOFFSET
 

GETDATE e CURRENT_TIMESTAMP retornam a data e hora local em um tipo de dados datetime.
GETUTCDATE retorna a hora UTC também no tipo de dados datetime.
- SYSDATETIME retorna a data e hora local no tipo de dados datetime2.
- SYSUTCDATETIME retorna a hora UTC também no tipo de dados datetime2.

- SYSDATETIMEOFFSET retorna a hora local mais o numero de horas e minutos de deslocamento do UTC no tipo de dados datetimeoffset.


UTC - significa 'Universal Time Coordinate" ou 'Tempo Universal Coordenado' ,  também conhecido como tempo civil, é o fuso horário de referência a partir do qual se calculam todas as outras zonas horárias do mundo. Corresponde à hora de inverno de Portugal Continental e Arquipélago da Madeira e à hora de verão do Arquipélago dos Açores.

É o sucessor do Tempo Médio de Greenwich (Greenwich Mean Time), cuja sigla é GMT. A nova denominação foi cunhada para eliminar a inclusão de uma localização específica num padrão internacional, assim como para basear a medida do tempo nos padrões atômicos, mais do que nos celestes.


2- Incrementando e decrementando valores em uma data


Para adicionar ou subtrair um intervalo de data ou hora em um valor para data utilize a função DATEADD.

SELECT DATEADD(YEAR, -1, '2013-04-02T00:00:00'); -> Subtrai um ano da data informada
SELECT DATEADD(YEAR, +1, '2014-04-02T00:00:00'); -> Adiciona um ano à data informada
SELECT DATEADD(Day, 1, '2014-04-29T00:00:00'); -> Adiciona um dia da data
SELECT DATEADD(Month, -1, '2014-04-29T00:00:00'); -> Subtrai um mês da data

SELECT DATEADD(hour , +1, '2014-04-29T00:00:00'); -> Adiciona uma hora à data





Sintaxe :  DATEAD (datepart, número, data)

Retorna uma data especificada com o intervalo número especificado (inteiro com sinal)  adicionado à datepart especificada dessa data.

A função DATEADD  usa 3 parâmetros :

1- O primeiro parâmetro é a parte da data a modificar. Os valores usados estão na tabela abaixo:
DatePartAbreviação
Yearyy, yyyy
quarterqq, q
monthmm, m
dayofyeardy, y
Daydd, d
weekwk, ww
weekdaydw, w
hourhh
minutemin, n
secondss, s
milisecondms
microsecondmcs
nanosecondns
2- O segundo parâmetro é o valor numérico para o número de de unidades dateparts que estamos adicionando/subtraindo do valor da data. (valores negativos subtraem as unidades das datas).
3- O terceiro parâmetro é a data a ser modificada.

Nota:

- O tipo de dados de retorno é o tipo de dados do argumento date, com exceção de literais de cadeia de caracteres.
- O tipo de dados de retorno para um literal de cadeia de caracteres é datetime.
- Um erro será gerado se a escala de segundos do literal de cadeia de caracteres tiver mais de três posições (nnn) ou contiver a parte de deslocamento do fuso horário.


3 - Encontrando a diferença entre duas datas


Para calcular a diferença entre duas datas utilize a função DATEDIFF.
 

Sintaxe : DATEDIFF ( datepart , startdate , enddate )

A função retorna a contagem (inteiro com sinal) dos limites especificados de datepart cruzados entre os parâmetros especificados startdate e enddate.

Neste exemplo eu estou usando o banco de dados Northwind.mdf e calculando a diferença entre a data de hoje e data armazenada no campo ShippedDate da tabela Orders em dias.



Sintaxe:
DATEDIFF ( datepart , startdate , enddate )
A função DATEDIFF aceita três parâmetros:
  1. datepart - usado para identificar se você esta contando a diferença em termos de dias, horas, meses, etc;
  2. A data inicio;
  3. A data fim;
Note que a função retorna o número de limites datepart cruzados o que não é a mesma coisa que o tempo decorrido entre as duas datas.
A seguir temos dois exemplos de consultas onde cada coluna retorna a quantidade de um limite datepart cruzado para cada datepart especificado, embora a diferença entre as duas datas seja de 100 nano segundos (0,000001 segundos).


SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(quarter, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(month, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(dayofyear, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(hour, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(minute, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(second, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');

SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');


- Cada datepart e suas abreviações retornam o mesmo valor.
- Se o valor de retorno estiver fora do intervalo de int (-2,147,483,648 a +2,147,483,647), um erro será retornado.
- Para millisecond, a diferença máxima entre startdate e enddate é de 24 dias, 20 horas, 31 minutos e 23.647 segundos.
- Para second, a diferença máximo é de 68 anos.
- Se a startdate e enddate forem atribuídos apenas um valor de hora e o datepart não for um datepart de hora, será retornado 0.
- Se apenas um valor de hora for atribuído a uma variável de tipo de dados 'data', o valor da parte 'data' faltante será definido como o padrão: 1900-01-01



4- Exibindo o valor string de parte de uma data


Para obter o nome do mês e dia da semana para uma data específica utilize a função DATENAME.

A função DATENAME retorna uma cadeia de caracteres que representa o datepart especificado da date especificada.

Sintaxe:  DATENAME ( datepart , date )

O valor do retorno depende do ambiente de idioma definido usando SET LANGUAGE.

No exemplo abaixo a consulta SQL retorna o nome do mês e o nome do dia da semana para o campo RequiredDate da tabela Orders do banco de dados Northwind.mdf.


Note que usamos a instrução SET LANGUAGE definindo o idioma como Português.


- A configuração de SET LANGUAGE é definida no momento da execução e não no momento da análise.

SET LANGUAGE define implicitamente a configuração de SET DATEFORMAT.


5- Determinando o último dia do mês

5- Determinando o último dia do mês

Para saber o último dia do mês de uma data utilize a função EOMONTH.

A função EOMONTH retorna o último dia do mês que contém a data especificada com um deslocamento opcional.

Sintaxe:    EOMONTH ( start_date [, month_to_add ] )
start_date
Expressão de data que especifica a data para a qual retornar o último dia do mês.
month_to_add
Expressão de inteiro opcional que especifica o número de meses a adicionar a start_date.Se esse argumento for especificado, EOMONTH adicionará o número de meses especificado a start_date e retornará o último dia do mês da data resultante. Se essa adição exceder o intervalo de datas válido, um erro será lançado.

Na consulta SQL baixo usamos a função EOMONTH para obter o último dia do mês de uma data para o mês atual e para o mês seguinte.




Essa função pode ser remota para servidores SQL Server 2012 e posteriores. Ela não pode ser remota para servidores com versão anterior a SQL Server 2012.

E com isso concluímos esta etapa mostrando algumas funções T-SQL para tratar datas no SQL Server.