none
Specificare le date tra un intervallo RRS feed

  • Domanda

  • Buonasera, avrei bisogno di specificare le varie data presenti in un intervallo composto da 2 colonne, ovvero data inizio e data fine, creando n record quanti sono i giorni presenti nell'intervallo 

    inserisco un esempio della tabella di partenza.

    grazie mille 

    martedì 9 marzo 2021 16:43

Risposte

  • Ciao,

    puoi usare un generatore di numeri sequenziali e la funzione dateadd:

    declare @T table(id int identity, NUMERO_INTERNO sysname, SEDE nchar(2), data_inizio datetime, data_fine datetime)
    insert into @t values(N'AA98038', N'SE', '1900-01-01', '2019-06-18')
    insert into @t values(N'AA98038', N'AS', '2019-06-19', '2100-12-31')
    
    ;with myGen as(
      select (row_number() over (order by (select null))-1) as Num0
      from	sys.objects as A		-- ~ 100
      cross	join sys.objects as B	-- ~ 100*100	= ~10k
      cross	join sys.objects as C	-- ~ 100*100*100= ~1M
    )
    select	id, NUMERO_INTERNO, SEDE, data_inizio, data_fine, datediff(day,data_inizio,data_fine)+1 as days, dateadd(day, Num0, data_inizio) as data_running
    from	@t
    cross	join myGen
    where	Num0<=datediff(day,data_inizio,data_fine)
    order	by id, data_inizio, data_running
    go

    In alcune circostanza è utile persistere in una specifica tabella opportunamente indicizzata, una sequenza numerica con il range di valori di interesse per l'applicazione.

    Giorgio

    mercoledì 10 marzo 2021 02:30