+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Sommare giorni su intervalli di date.

  1. #1
    guil non è in linea Scolaretto
    Post
    124

    Sommare giorni su intervalli di date.

    Buonasera amici, ho un database (sql server) così popolato:

    ID-CODFISC-DAL-AL
    1-XXXXXXX-10/10/2016-13/10/2016 (giorni totali 4)
    2-XXXXXXX-20/10/2016-25/10/2016 (giorni totali 6)
    3-XXXXXXX-30/11/2016-03/12/2016 (giorni totali 4)

    Se effettuo una ricerca (es. dal 01.10.2016 al 31.10.2016)con specificato ovviamente codice fiscale=xxxxxxx, vorrei avere un conteggio totale di 10 giorni (nel textbox4), invece il seguente codice mi fa un conteggio totale di tutti i giorni registrati relativi a quel codice fiscale restituendomi un totale di 14 giorni:

    codice:
     Dim source2 As String = WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
            Dim sql2 As String = "select SUM(DATEDIFF(day, Dal, Al)+1) AS Total FROM Tab1 WHERE (Codfisc=@Codfisc)"
            Dim conn2 As New SqlConnection(source2)
            conn2.Open()
            Dim cmd2 As New SqlCommand(sql2, conn2)
            cmd2.Parameters.AddWithValue("@Codfisc", Me.GridView1.SelectedRow.Cells(8).Text)
            Dim dr2 As SqlDataReader
            dr2 = cmd2.ExecuteReader()
            While dr2.Read()
                TextBox4.Text = dr2("Total").ToString()
            End While
            conn2.Close()
    Se provo invece così non mi viene restituito nulla:

    codice:
     Dim source2 As String = WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
            Dim sql2 As String = "select SUM(DATEDIFF(day, Dal, Al)+1) AS Total FROM Tab1 WHERE (Codfisc=@Codfisc) and (Dal=@Dal) and (Al=@Al)"
            Dim conn2 As New SqlConnection(source2)
            conn2.Open()
            Dim cmd2 As New SqlCommand(sql2, conn2)
            cmd2.Parameters.AddWithValue("@Codfisc", Me.GridView1.SelectedRow.Cells(8).Text)
            cmd2.Parameters.AddWithValue("@Dal", Me.TextBox2.Text)
            cmd2.Parameters.AddWithValue("@Al", Me.TextBox3.Text)
            Dim dr2 As SqlDataReader
            dr2 = cmd2.ExecuteReader()
            While dr2.Read()
                TextBox4.Text = dr2("Total").ToString()
            End While
            conn2.Close()
    Come posso risolvere?
    Grazie un saluto.

  2. #2
    grimreaper non è in linea Scolaretto
    Luogo
    Treviso
    Post
    450
    Ciao,
    la query nella seconda porzione di codice non ti restituirà mani niente se i valori di DAL e AL non coincidono.

    So che è poco ortodosso, ma funziona:
    codice:
    select SUM(DATEDIFF(day, dal, al)+1) AS Total FROM Tab1 WHERE codfisc = 'XXXXXXX' and Dal >= '01/10/2016' and Al < '01/11/2016';
    L'ho fatto al volo, controlla bene.
    - The user formerly known as GRiM[R]eaPeR -

  3. #3
    guil non è in linea Scolaretto
    Post
    124
    Quote Originariamente inviato da grimreaper Visualizza il messaggio
    Ciao,
    la query nella seconda porzione di codice non ti restituirà mani niente se i valori di DAL e AL non coincidono.

    So che è poco ortodosso, ma funziona:
    codice:
    select SUM(DATEDIFF(day, dal, al)+1) AS Total FROM Tab1 WHERE codfisc = 'XXXXXXX' and Dal >= '01/10/2016' and Al < '01/11/2016';
    L'ho fatto al volo, controlla bene.
    Ciao Grimreaper, non mi funziona il codice da te postato...

  4. #4
    guil non è in linea Scolaretto
    Post
    124
    Grimreaper mi scuso con te...il tuo codice era esatto (avevo cancellato il db e ovvio che non mi restituiva nulla)! Di seguito posto il codice completo un po modificato per chi ne avesse bisogno:

    codice:
     Dim a As Date = Date.Parse(TextBox2.Text)
            Dim b As Date = Date.Parse(TextBox3.Text)
            Dim source2 As String = WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
            Dim sql2 As String = "select SUM(DATEDIFF(day, dal, al)+1) AS Total FROM Tab1 WHERE codfisc = @codfisc and Dal >=@Dal and Al <=@al"
            Dim conn2 As New SqlConnection(source2)
            conn2.Open()
            Dim cmd2 As New SqlCommand(sql2, conn2)
            cmd2.Parameters.AddWithValue("@Codfisc", Me.GridView1.SelectedRow.Cells(8).Text)
            cmd2.Parameters.AddWithValue("@Dal", a)
            cmd2.Parameters.AddWithValue("@Al", b)
            Dim dr2 As SqlDataReader
            dr2 = cmd2.ExecuteReader()
            While dr2.Read()
                TextBox4.Text = dr2("Total").ToString()
            End While
            conn2.Close()
    Ho dovuto inserire
    codice:
     Dim a As Date = Date.Parse(TextBox2.Text)
     Dim b As Date = Date.Parse(TextBox3.Text)
    perchè se provo a fare una ricerca 08/09/2016 sql mi interpreta il contrario cioè 09/08/2016! Quindi avrei un calcolo errato!
    Grazie ancora e alla prossima.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi