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