N>
Construa geradores de data e manipule data e hora no SQL Server
Às vezes você necessita gerar seqüências de valores de data e/ ou hora. Por exemplo, imagine um data warehouse com sua estrutura multidimensional e armazenando as medidas e dimensões em tabelas fato e dimensão. Já que uma das dimensões é praticamente sempre a dimensão tempo, você necessitaria gerar a seqüência de valores de data (hora) e carregá-los na tabela de dimensão de hora. Este artigo demonstra como construir geradores de data usando o SQL. Além disto, ele mostrará algumas técnicas úteis que podem ajudá-lo a manipular dados de data e hora.
Geradores de data
Primeiro, vamos criar e carregar uma tabela auxiliar que consiste de uma coluna do tipo integer .
Listagem 1. Criando e carregando a tabela auxiliar.
SET NOCOUNT ON;
DECLARE
@startDate smalldatetime, @endDate smalldatetime, @i int;
SELECT @i = 1,
@startDate = ‘Jan 01, 2007’,
@endDate = DATEADD(yy, 1, @startDate);
IF EXISTS(SELECT * FROM sysobjects
WHERE ID = (OBJECT_ID(‘dbo.sequence’)) AND xtype = ‘U’)
DROP TABLE dbo.sequence;
CREATE TABLE dbo.sequence(num int NOT NULL);
WHILE(@i <= (SELECT DATEDIFF(dd, @startDate, @endDate)))
BEGIN
INSERT INTO dbo.sequence VALUES(@i);
SET @i = @i + 1;
END
Você pode usar o SQL para gerar seqüências de números de diversas maneiras. O código da Listagem 1 mantém as coisas sem complicações usando um loop simples.A quantidade de números (365) na tabela auxiliar é igual ao número de dias no ano 2007 e foram calculados automaticamente usando a função DATEDIFF do SQL Server. Agora, você pode gerar a seqüência de dias no ano 2007 como mostrado na Listagem 2.
Listagem 2. Gerando a seqüência de dias do ano 2007.
DECLARE
@iniDate smalldatetime;
SELECT @iniDate = ‘Dec 31, 2006’;
SELECT DATEADD(dd, num, @iniDate) DayOfYear
FROM sequence;
DayOfYear
-----------------------
2007-01-01 00:00:00
2007-01-02 00:00:00
2007-01-03 00:00:00
2007-01-04 00:00:00
. . . . . . . . . .
2007-12-27 00:00:00
2007-12-28 00:00:00
2007-12-29 00:00:00
2007-12-30 00:00:00
...