Tema: Re: MSSQL : Kaip uzpildyti skyles
Autorius: Jornada Del Muerto
Data: 2010-12-22 15:21:54
Tiesa next hour funkcijoj klaida buvo, didejo ne valanda o diena (kazkaip is inercijos parasiau), cia gera funkcija:
CREATE FUNCTION [dbo].[OmniNews_NextHour] (@data datetime)
RETURNS datetime
AS
BEGIN
declare @retVal datetime
-- Nukerpame minutes ir padarome 59min - ta prasme paskutine valandos minute
-- Tam kad neiskritinetu kazkokia minute
Set @retVal = CAST ( (CONVERT(char(14),DATEADD(hour,1,@data),25) + '59') As DATETIME)
RETURN @retVal
END
Turint sias funkcijas su sia procedura eina istraukt pagal duotas taisykles bet koki diapazona, tiesa viskas labai kreivai dirba, bet konkreciau ir sunku pasakyti, bet turi si procedura veikti, jai reikia abieju funkciju kurias daviau:
CREATE procedure [dbo].[AGP_OmniNews_Diapazonas] (@from datetime, @to datetime) AS
declare @result table (DT datetime, Value int)
declare @currentDate datetime
declare @toBigDate datetime
set @toBigDate = dbo.OmniNews_NextHour(@to) -- gauname per didele 1 valanda data, pagal ja eisime ciklu tol kol einamoji data nebus uz ja didesne
set @currentDate = @from
WHILE @currentDate < @toBigDate BEGIN
INSERT INTO @result (DT, Value) Values (@currentDate, dbo.OmniNews_GetValueByDate(@currentDate))
Set @currentDate = dbo.OmniNews_NextHour(@currentDate)
END
SELECT * FROM @result ORDER BY DT
GO