Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

quinta-feira, 24 de março de 2011

Funções de data no SQL Server

Se você tivesse nascido ontem, obviamente hoje você teria um dia de idade. Agora responda rápido, e em SQL: qual o número de dias vividos por você até hoje?
Aprenderemos neste artigo a trabalhar com funções de data no SQL Server. As principais são: GETDATE, DATEPART, DATEADD e DATEDIFF.
Um detalhe importante é que as funções de data trabalham referenciando unidades de data. As mais comuns são:
- year(ano);
- month(mês);
- day(dia);
Observações:
1) o Books OnLine do SQL Server apresenta a lista completa desses parâmetros de valores ( unidades ), bem como outras funções de data;
2) as configurações de data para esse artigo estão no formato americano. Logo, a data 02/01/2004 deve ser lida como primeiro de fevereiro de 2004.
GETDATE ( )
A função GETDATE retorna a data e a hora atuais do sistema. Podemos, no Query Analyzer , digitar o seguinte comando para obter a data e hora atuais:
SELECT GETDATE ( )
DATEPART ( unidade , data )
A função DATEPART retorna a parte especificada de uma data como um inteiro. Observe os exemplos:
SELECT DATEPART ( YEAR , '02/01/2004' )
Reposta: 2004
SELECT DATEPART ( MONTH , '02/01/2004' )
Reposta: 2
SELECT DATEPART ( DAY , '02/01/2004' )
Reposta: 1
DATEADD ( unidade , numero_unid,data )
A função DATEADD retorna uma nova data através da soma do número de unidades especificadas pelo valor unidade a uma data. Observe os exemplos:
SELECT DATEADD ( DAY ,6, '02/01/2004' )
Reposta: 2004-02-07
SELECT DATEADD ( MONTH ,6, '02/01/2004' )
Reposta: 2004-08-01
SELECT DATEADD ( YEAR ,6, '02/01/2004' )
Reposta: 2010-02-01
DATEDIFF ( unidade , data1,data2 )
A função DATEDIFF calcula a diferença entre as datas data2 e data1 , retornando o resultado como um inteiro, cuja unidade é definida pelo valor unidade . Observe os exemplos:
SELECT DATEDIFF ( DAY , '02/01/2004' , '05/25/2004' )
Reposta: 114 (dias)
SELECT DATEDIFF ( MONTH , '02/01/2004' , '05/25/2004' )
Reposta: 3(meses)
SELECT DATEDIFF ( YEAR , '02/01/2004' , '05/25/2006' )
Reposta: 2(anos)
Dessa forma, a expressão SQL que retorna o número de dias vivido por você até hoje é:

Select dateadd(day,-1,(dateadd(month,1,convert(char(08),getdate(),126)+'01')))Retorna o último dia do mês.
 
SELECT DATEDIFF(DAY, suadata, GETDATE())
onde suadata deve ser substituída pela sua data de nascimento.
Outro exemplo interessante é mostrado através do código T-SQL abaixo. Usando funções de data, exibimos, para cada cliente, a idade em dias, meses e em anos (idade do cliente na data atual e em 31 de dezembro).

Observe a lógica utilizada no comando CASE. Neste caso, é testado se o cliente já fez aniversário, comparando o mês em que ele nasceu com o mês corrente e comparando o dia em que ele nasceu com o dia corrente. Se essa comparação for verdadeira, basta diminuir o ano atual do ano de nascimento do cliente. Caso contrário (o cliente ainda não fez aniversário), temos que diminuir 1 do valor anterior.

SELECT NOME, NASCIMENTO,

  DATEDIFF(DAY,NASCIMENTO,GETDATE())AS DIASVIVIDOS,

  DATEDIFF(MONTH,NASCIMENTO,GETDATE()) AS MESESVIVIDOS,

  CASE WHEN

     DATEPART(MONTH,NASCIMENTO)<= DATEPART(MONTH,GETDATE()) AND

     DATEPART(DAY,NASCIMENTO)<= DATEPART(DAY,GETDATE())

  THEN

        (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))

  ELSE

       (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))- 1

       END AS IDADEATUAL,

  DATEDIFF(YEAR,NASCIMENTO,GETDATE())AS IDADE3112

FROM CLIENTE
26-05pic.JPG 
Vimos, neste artigo, exemplos do uso de funções de data no SQL Server. Outros SGBDs implementam funções de data, provavelmente com sintaxe diferente. Consulte a documentação do SGBD que você utiliza, para obter maiores detalhes.





Fontes: http://social.msdn.microsoft.com/Forums/pt-BR/520/thread/16524be2-a279-4546-9afa-a55f05c6221e
http://www.devmedia.com.br/post-1946-Funcoes-de-data-no-SQL-Server.html

Nenhum comentário:

Postar um comentário

Related Posts Plugin for WordPress, Blogger...