+ Rispondi al messaggio
Pagina 2 di 3 primaprima 123 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 29

Verificare sovrapposizione date

  1. #11
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    3,135
    Like Inviati  
    5
    Like Ricevuti  
    5
    Quote Originariamente inviato da guil Visualizza il messaggio
    L'operatore BETWEEN non mi sembra appropriato al caso.
    La query come l'hai riscritta con gli operatori >= e <= è funzionalmente equivalente a quella con l'operatore BETWEEN. Se hai tempo e voglia potresti riprovare con BETWEEN ma usando le stese date dell'ultima prova; così. per curiosità.

    @gibra
    non scattare come una molla ogni volta che qualcuno osa fare una precisazione. Ho definito "buona pratica" l'uso dei parametri ed ho semplicemente aggiunto che "query sbagliata", in italiano, significa un'altra cosa. Calma!
    ℹ️ Leggi di più su Brontolo ...

  2. #12
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,236
    Like Inviati  
    21
    Like Ricevuti  
    11
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    @gibra
    non scattare come una molla ogni volta che qualcuno osa fare una precisazione. Ho definito "buona pratica" l'uso dei parametri ed ho semplicemente aggiunto che "query sbagliata", in italiano, significa un'altra cosa. Calma!
    Guarda che non sono scattato da nessuna parte, e sono calmissimo.
    Evidentemente sei tu che hai frainteso.

    Però ti confesso che mi sarei aspettato che tu, in qualità di esperto, 'cavalcassi', rafforzandolo, l'argomento dei Paremetri che, tra l'altro, proprio in questo caso specifico è determinante, visto i tipi di campi definiti nella struttura della tabella.

    Ho anche ribadito che ognuno è libero di pensare e codificare come meglio crede.
    Come vedi, hai proprio frainteso.

    ℹ️ Leggi di più su gibra ...

  3. #13
    guil non è in linea Scolaretto
    Post
    140
    Like Inviati  
    0
    Like Ricevuti  
    0
    No con l'operatore BETWEEN non funziona, se viene specificato un range di date che si trova nel mezzo del periodo non viene restituito nulla. Cioè mettiamo il caso che è presente nel db un periodo 10.02.2016 - 15.02.2016 e ricerco dal 14.02.2016 al 14.02.2016 non viene restituito nulla.
    Un saluto.

  4. #14
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    3,135
    Like Inviati  
    5
    Like Ricevuti  
    5
    E' strano. L'operatore "BETWEEN ... AND ..." è funzionalmente equivalente alla coppia ">= ... AND <= ...". Sospetto qualche problema con il formato delle date.
    Tieni poi presente che una sovrapposizione potrebbe esserci anche nel caso che il periodo richiesto sia più lungo di un periodo già esistente e che inizi prima e termini dopo.
    ℹ️ Leggi di più su Brontolo ...

  5. #15
    L'avatar di nman
    nman non è in linea Scribacchino
    Post
    1,671
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da guil Visualizza il messaggio
    Risolto così, ho fatto tutte le prove e va bene:
    "SELECT Codfisc, Dal, Al FROM Ferie where Codfisc = @Codfisc and ((Dal) >= @Dal and (Al) <= (@Al)) or ((Dal) <= @Dal and (Al) >= (@Al)) or (Dal between @Dal and @Al)"
    
    Sei sicuro ???????????????

    io ho dei dubbi
    Innanzitutto non capisco a cosa ti serva il CodiceFiscale nella WHERE perche poi con quel "gioco" di AND e OR prelevi comunque i record indipendentemente dal CodiceFiscale


    poi a livello proprio di date hai ancora un problema nel caso hai una richiesta con inizio in un periodo e fine dopo la fine dello stesso periodo

    prova il minitest sotto dove c'è anche una ipotesi di soluzione
    La tabella è la tua del 1° post mentre i dati sono i tuoi del #8
    (mi sono concentrato solamente sulla query SQL)
    declare @Dal as date
    declare @Al as date
    declare @Codfisc as varchar(16)
    
    set @Dal = '2017-09-03'      -- '2017-09-03'    
    set @Al = '2017-09-20'       -- '2017-09-20'
    set @Codfisc = 'x Prende Tutto x'
    
    -- Per comodita di Test metto i dati di origine
    SELECT Codfisc, Dal, Al FROM Ferie ORDER BY Dal; 
    
    --   :-(  :-(   La tua query       Perde i record che iniziano in un periodo di ferie e terminano dopo la fine dello stesso periodo    
    SELECT Codfisc, Dal, Al FROM Ferie where   Codfisc = @Codfisc AND ((Dal) >= @Dal and (Al) <= (@Al)) OR ((Dal) <= @Dal and (Al) >= (@Al)) OR (Dal between @Dal and @Al);
    
    --   :-)   Cosi sembra che va meglio   
    SELECT Codfisc, Dal, Al FROM Ferie WHERE  ( (@Dal>=Dal AND @Dal<=Al) OR (@Al>=Dal AND @Al<=Al) OR (@Dal<=Dal AND @Al>=Al) );
    
    --   con between è la stessa cosa
    SELECT Codfisc, Dal, Al FROM Ferie WHERE  ( (@Dal BETWEEN DAL AND Al) OR (@Al BETWEEN Dal AND Al) OR (@Dal<=Dal AND @Al>=Al) );
    
    -- Finito
    
    Facci sapere

    .
    Ultima modifica di nman; 25-06-2017 11:29 

  6. #16
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    3,135
    Like Inviati  
    5
    Like Ricevuti  
    5
    Quote Originariamente inviato da nman Visualizza il messaggio
    Innanzitutto non capisco a cosa ti serva il CodiceFiscale nella WHERE perche poi con quel "gioco" di AND e OR prelevi comunque i record indipendentemente dal CodiceFiscale
    Il codice fiscale gli serve perché intende verificare se quella stessa persona ha già dei periodi di ferie.
    L'errore sta nel non aver chiuso correttamente le parentesi che devono racchiudere tutte le condizioni in OR, oltre a quanto ho fatto notare nel precedente post.
    ℹ️ Leggi di più su Brontolo ...

  7. #17
    L'avatar di nman
    nman non è in linea Scribacchino
    Post
    1,671
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    Il codice fiscale gli serve perché intende verificare se quella stessa persona ha già dei periodi di ferie.
    Si, giusto .....
    anche se bislenca ha la sua logica

    Chi ha gia richiesto una giornata di ferie non puo richiedere null'altro anche se deve "godere" di altri 90 gg di ferie
    roba che 30 anni fa avrebbe provocato una rivoluzione

    .

  8. #18
    guil non è in linea Scolaretto
    Post
    140
    Like Inviati  
    0
    Like Ricevuti  
    0
    Per sintetizzare il tutto:
    1) Il codice fiscale è scontato che serve per identificare solo quel tipo di lavoratore;
    2) L'operatore BETWEEN restituisce il risultato voluto soltanto se nella ricerca indichiamo uno degli estremi cioè o inizio o fine. (Es. se nel db abbiamo registrato un periodo dal 10.02.2017 al 15.02.2017 e ricerchiamo dal 10.02.2017 al 11.02.2017 è ok, oppure dal 12.02.2017 al 15.02.2017 è ok, se ricerchiamo dal 14.02.2017 al 14.02.2017 il BETWEEN non trova nulla). Ho fatto tutte le prove con i valori scritti in precedenza e la query risponde perfettamente a tutte le attese senza che si verifichi nessun accavallamento di date. Quindi deduco che il solo BETWEEN non basta a evitare ciò.

  9. #19
    guil non è in linea Scolaretto
    Post
    140
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    E' strano. L'operatore "BETWEEN ... AND ..." è funzionalmente equivalente alla coppia ">= ... AND <= ...". Sospetto qualche problema con il formato delle date.
    Tieni poi presente che una sovrapposizione potrebbe esserci anche nel caso che il periodo richiesto sia più lungo di un periodo già esistente e che inizi prima e termini dopo.
    No no ho provato e funziona al 100%.

  10. #20
    guil non è in linea Scolaretto
    Post
    140
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da nman Visualizza il messaggio
    Sei sicuro ???????????????

    io ho dei dubbi
    Innanzitutto non capisco a cosa ti serva il CodiceFiscale nella WHERE perche poi con quel "gioco" di AND e OR prelevi comunque i record indipendentemente dal CodiceFiscale
    Come già spiegato anche da Brontolo serve per identificare le ferie che riguardano solo quel dipendente.

    poi a livello proprio di date hai ancora un problema nel caso hai una richiesta con inizio in un periodo e fine dopo la fine dello stesso periodo
    Assolutamente no tutto verificato.

+ Rispondi al messaggio
Pagina 2 di 3 primaprima 123 ultimoultimo

Potrebbero interessarti anche ...

  1. Verificare data tra due date
    Da tizike nel forum Visual Basic 6
    Risposte: 13
    Ultimo Post: 05-03-2020, 17:59
  2. sovrapposizione colonne-righe
    Da riccardo ponsiani nel forum Microsoft Word
    Risposte: 11
    Ultimo Post: 06-07-2010, 15:02
  3. [CSS] Sovrapposizione DIV come?
    Da tonyuk nel forum HTML, CSS e JavaScript
    Risposte: 2
    Ultimo Post: 07-11-2009, 18:14
  4. Sovrapposizione di funzioni
    Da _gas nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 24-05-2006, 21:02
  5. Sovrapposizione di grafici
    Da pedros nel forum Microsoft Word
    Risposte: 6
    Ultimo Post: 19-12-2005, 10:09