terça-feira, 28 de abril de 2009

Funções de data do SQL Server

Hoje vamos conhecer as funções para tratamento de datas no SQL Server.

A função getdate(), retorna a data atual do servidor. A função não espera parâmetros e pode ser chamada com um select comum, assim:

SELECT GETDATE() as [Data atual]


Podemos também acrescentar dias a função, para atender alguma necessidade computacional asssim:

SELECT GETDATE() as [Data atual],
GETDATE()+10 as [Data atual com mais 10 dias],
GETDATE()-10 as [Data atual com menos 10 dias]


Mas utilizando o método acima, podemos apenas incrementar dias a data. E se quisermos adicionar dias, meses ou anos?

Podemos usar para este objetivo a função DATEADD. Esta função recebe três parâmetros:
Datepart, que é o definidor de qual parte da data será incrementada, Number que é o número que incrementara a parte da data definida no parâmetro anterior e por fim, a data que será incrementada. A função retorna um inteiro.

Observe os exemplos abaixo:

SELECT GETDATE() AS [Data atual],DATEADD(DAY,5,GETDATE()) AS [Data atual com cinco dias a mais]
,GETDATE() AS [Data atual],DATEADD(MONTH,5,GETDATE()) AS [Data atual com cinco meses a mais]
,GETDATE() AS [Data atual],DATEADD(YEAR,5,GETDATE()) AS [Data atual com cinco anos a mais]


--DATEADD para diminuir datas
SELECT GETDATE() AS [Data atual],DATEADD(DAY,-5,GETDATE()) AS [Data atual com menos cinco dias ]
,GETDATE() AS [Data atual],DATEADD(MONTH,-5,GETDATE()) AS [Data atual com menos cinco meses]
,GETDATE() AS [Data atual],DATEADD(YEAR,-5,GETDATE()) AS [Data atual com menos cinco anos]


E se precisarmos determinar a diferença em anos, meses ou dias entre duas datas? A função DATADIFF retorna esta informação. São três parâmetros, onde o primeiro é o definidor de qual parte das datas será comparada, e os dois últimos são as duas datas que serão comparadas. A função retorna um inteiro, e pode ser implementada assim:

--DATEDIFF
SELECT DATEDIFF(DAY,'2009-04-28 09:05:14.857','2009-05-03 09:05:14.857') AS [Diferença de dias entre duas datas]
,DATEDIFF(MONTH,'2009-04-28 09:05:14.857','2009-09-03 09:05:14.857') AS [Diferença de meses entre duas datas]
,DATEDIFF(YEAR,'2009-04-28 09:05:14.857','2014-05-03 09:05:14.857') AS [Diferença de anos entre duas datas]


Para obter o dia, mês ou ano de uma data, como um valor inteiro, podemos usar o DATAPART. São dois parâmetros, o definidor da unidade e a data que será analisada. Afunção retorna um inteiro, e pode ser implementada assim:

SELECT DATEPART(DAY,'2009-04-28 09:05:14.857') AS [Extraindo o dia da data]
,DATEPART(MONTH,'2009-04-28 09:05:14.857') AS [Extraindo o mês da data]
,DATEPART(YEAR,'2009-04-28 09:05:14.857') AS [Extraindo o ano da data]


Achou o DATEPART muito complicado? O SQL Server dá uma forcinha e disponibiliza para você as funções DAY, MONTH e YEAR. Estas funções esperam como parãmetro, apenas a data que precisa ser analisada, retorna um valor inteiro e pode ser implementada assim:

--DAY
SELECT DAY('2009-04-28 09:05:14.857') AS [Extraindo o dia da data]
,MONTH('2009-04-28 09:05:14.857') AS [Extraindo o mês da data]
,YEAR('2009-04-28 09:05:14.857') AS [Extraindo o ano da data]


Nenhum comentário:

Postar um comentário

Leave your comment here!