Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584

    [sqlServer] inserire tanti valori quanto differenza in mesi tra 2 date

    ho sql server
    avendo 2 date, devo inserire in una seconda tabella tanti valori quanto la differenza in mesi

    sto pensando ad un cursore ,ma non so ..forse mi sono incasinato a pensare, esistono altri modi?

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    declare @campo1: '11-02-2000'
    declare @campo2: '20-05-2000'

    la differenza è 3 mesi
    quindi inserisco 3 record in una tabella
    @datediff=dselect atediff(month,campo1,campo1)
    OPEN @MyCursor
    FETCH NEXT FROM @MyCursor
    INTO ***


    WHILE @@FETCH_STATUS = 0

    BEGIN
    la mia domanda è invece di usare i cursori se esiste un'altro modo tutto qua
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4

  5. #5
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    strano , ma non riesco a trovare l'errore in questa SP che ho appena fatto
    mi inserisce valori nella tabella: T1 all'infinito senza aggiungere il mese

    codice:
    ALTER  procedure S
     as
     Declare @A date
     Declare @B date
     Declare @C Date
     -----------------------------------------------------
        DECLARE @MyCursor CURSOR
        SET @MyCursor = CURSOR FAST_FORWARD
        FOR
    
    SELECT        data1,data2,data3
    FROM            DLEFT 
    
        OPEN @MyCursor
        FETCH NEXT FROM @MyCursor
    --valorizzo variabili
        INTO @A,@B,@C
    
            WHILE @@FETCH_STATUS = 0        
            BEGIN
           
            declare @MesiDiff int
            set @MesiDiff=(select DATEDIFF(MONTH,@A,@B))
    
            --primo range
            DECLARE @mesi INT = 0;
            WHILE @mesi < @MesiDiff
            BEGIN
              insert into T1([data]) values--,fase,MW,Area,technology,country) values
            ( DATEADD(month,@mesiDiff,@A)  )
               SET @mesi = @mesi + 1;
            END;
    
            FETCH NEXT FROM @MyCursor
            --
            --INTO @ProjectCode
            END
    
        CLOSE @MyCursor
        DEALLOCATE @MyCursor
    Ultima modifica di Kahm; 23-06-2016 a 12:23
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  6. #6
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    declare @campo1: '11-02-2000'
    declare @campo2: '20-05-2000'

    la differenza è 3 mesi
    quindi inserisco 3 record in una tabella

    la mia domanda è invece di usare i cursori se esiste un'altro modo tutto qua
    Si, più o meno così

    codice:
     insert into tua_tab (num)
       select 
            Q.Num
        from 
        (
          select Num from dbo.tbNumConsecutivi
           WHERE Num <=datediff(Month,@dIni,@dFin)
        ) Q
    dove dbo.tbNumConsecutivi contiene i numeri consecutivi da 1 fino a ... quello che ti serve

    P.S.
    dai un occhio qui ,al metodo proposto da Itzik Ben Gan, se non vuoi usare la tabella dbo.tbNumConsecutivi
    http://forum.masterdrive.it/blogs/ss...-festivit-116/

    HTH

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.