Manā gadījumā pielietojums šai funkcijai- veidot smuku pārskatu (līkni), kurā tiek attēloti visi perioda datumi.
(varbūt pazīstama situācija- notikumi tiek reģistrēti tabulā, tomēr tie nenotiek katru dienu. Katram notikumam ir kāds izpildes laiks. Vēloties iegūt grafisku pārskatu ar vidējo izpildes laiku- visu skaistumu bojā tas, ka pārskatā netiek attēloti datumi, kuros nekāda aktivitāte nav notikusi).
Kāpēc funkcija atgriež otru kolonnu ar Char lauku? Tāpēc ka latviešiem ir mode datumus rakstīt formātā "dd.MM.yyyy", bet kārtot pēc tāda lauka ir pavisam nesmuki. Protams, piekrītu, ka datuma attēlošanas formātu varēju veidot pārskatā, bet šajā gadījumā izvēlējos sev ērtāko veidu.
Create Function [dbo].[IntervalaDatumi]Un te apmēram kā tas izskatās rezultātā:
(
@DatumsNo DateTime,
@DatumsLidz DateTime
)
Returns @tab Table
(
Datums DateTime,
DatumsChar char(10)
)
As
Begin
Declare @Dienas int
Declare @i int
Set @Dienas = DateDiff(Day, @DatumsNo, @DatumsLidz)
Set @i = 0;
While (@Dienas > @i)
Begin
Insert Into @tab(Datums, DatumsChar)
Values (DateAdd(Day, @i, @DatumsNo), Convert(Char(10), DateAdd(Day, @i, @DatumsNo), 104))
Set @i = @i + 1
End
return
End
viss jau strādā smuki, tikai pēdēja diena arī jāskaita iekšā un ja nu kāds idiots padod datumus otrādā secībā - lielāko no sākuma.
AtbildētDzēstNu tas kā kuram vajag.
AtbildētDzēstVar jau viegli pielāgot pamainot ciklu uz šādu:
While (@Dienas >= @i)