32 messaggi dal 13 agosto 2017
Ciao amici, sono nuovo del forum e avrei bisogno di un piccolo aiuto. Ho un db sql server così strutturato e popolato:

Id - Codfisc - Dal - Al
1 - xxxxxxx - 01/02/2017 - 13/02/2017

Se eseguo una ricerca per es. dal 01/01/2017 al 13/02/2017 mi restituisce "13" sul textbox4 ed è corretto, se invece eseguo una ricerca 01/01/2017 al 07/02/2017 mi restituisce "0" invece che "7". Di seguito il 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()

            If IsDBNull(dr2("Total")) Then
                TextBox4.Text = "0"
            End If


        End While

        conn2.Close()


Dove sbaglio?
Un saluto e grazie.
244 messaggi dal 22 gennaio 2017
Contributi
Ciao MarkRoss,
Non capisco perchè l'intervallo di date 01/01/2017 dovrebbe restituirti solamente 13. Intendevi 01/02/2017 come dall'esempio?

Ad ogni modo il SQL mi sembra corretto: http://sqlfiddle.com/#!6/0eba9/3
Non avrei usato l'operatore SUM poichè non stai raggruppando nessuna informazione.
32 messaggi dal 13 agosto 2017
Ciao, no l'esempio riportato è corretto. Mettiamola così: vorrei verificare quanti giorni di ferie ha preso un dipendente (provo a fare una ricerca dal 01.01.2017 al 13.02.2017) e il totale dei giorni restituito è pari a 13 ed è giusto. Se invece ricerco dal 01.01.2017 al 07.02.2017 deve restituirmi 7 invece mi da 0.
Modificato da MarkRoss il 13 agosto 2017 21.58 -
244 messaggi dal 22 gennaio 2017
Contributi
Hai verificato che le date siano tutte presenti?
Riesci a replicare la situazione del db con un esempio, simile a quello che ho condiviso nel post precedente?
Grazie
32 messaggi dal 13 agosto 2017
Scusami ma l'esempio è chiarissimo....Il signor Rossi dal 20.03.2017 al 25.03.2017 ha preso 6 giorni di ferie...procedo nel fare una ricerca dal 01.01.2017 al 22.03.2017 (e non 25.03.2017) il conteggio deve restituirmi n° 3 giorni! Non riesco a capire cosa non ti è chiaro....
Modificato da MarkRoss il 13 agosto 2017 22.26 -
244 messaggi dal 22 gennaio 2017
Contributi
Non mi sono chiari i dati presenti nel db.
Il tuo primo esempio è chiaro, ma a me funziona come da esempio allegato.
Mi chiedevo se tu avessi dati diversi.
244 messaggi dal 22 gennaio 2017
Contributi
MarkRoss ha scritto:
Scusami ma l'esempio è chiarissimo....Il signor Rossi dal 20.03.2017 al 25.03.2017 ha preso 6 giorni di ferie...procedo nel fare una ricerca dal 01.01.2017 al 22.03.2017 (e non 25.03.2017) il conteggio deve restituirmi n° 3 giorni! Non riesco a capire cosa non ti è chiaro....
Modificato da MarkRoss il 13 agosto 2017 22.26 -

Questo ultimo esempio è diverso dal precedente.
Qui hai 3 variabili in gioco.
1) data dal
2) data al
3) filtro.

L'operatore datediff non è sufficiente.
Devi calcolare la data minima tra il 22/3 e 25/3!
32 messaggi dal 13 agosto 2017
Il db ha un record presente:

Id=1
Codfisc=XXXXXXXX (Lo prendo da un gridview)
Dal: 01.02.2017
Al: 13.02.2017

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.