Gestione di una where

mercoledì 06 ottobre 2010 - 13.03

trinity Profilo | Guru

Raga,
per ora vi posto solo il codice della mia where e vi spiego il mio problema, poi se non bastasse vi posto anche dei dati di esempio.

WHERE (Ap.Datafineattivita = '01-01-9999' Or Ap.Datafineattivita BETWEEN '01-05-2010' AND '31-05-2010') AND
(Ap.data1 BETWEEN '01-05-2010' AND '31-05-2010') OR (Ap.data2 BETWEEN '01-05-2010' AND '31-05-2010') OR
(Ap.data3 BETWEEN '01-05-2010' AND '31-05-2010') OR (Ap.data4 BETWEEN '01-05-2010' AND '31-05-2010') OR
(Ap.data5 BETWEEN '01-05-2010' AND '31-05-2010') OR (Ap.data6 BETWEEN '01-05-2010' AND '31-05-2010') OR
(Ap.data7 BETWEEN '01-05-2010' AND '31-05-2010') OR (Ap.data8 BETWEEN '01-05-2010' AND '31-05-2010')

in pratica una mia query ha questa where...ma nn mi funziona come vorrei ossia questa query gestisce la selezione di record in base a delle date. in questo codice come periodo di selezione vi è maggio.
la where deve fare dei controlli in ordine ossia se soddisfa i requisiti della datafineattività può passare alle date successive..però con questo codice se scrivo datafineattività= 01-03-2010 i record vengono ugualmente presi perchè questi periodo nella tabella si trova tra le colonne data1 e data2...invece il record non deve essere preso perchè la datafineattività non è uguale a 01-01-9999 oppure non rientra tra il periodo 01-05-2010 - 31-05-2010...sbaglio sicuramente la gestione delle And...OR ma nn riesco a trovare l'inchippo.

ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

ma_di Profilo | Junior Member

>WHERE (Ap.Datafineattivita = '01-01-9999' Or Ap.Datafineattivita
>BETWEEN '01-05-2010' AND '31-05-2010') AND
>(Ap.data1 BETWEEN '01-05-2010' AND '31-05-2010')

Vista così la where si comporta correttamente, perchè la OR ti esclude il test su 01-01-9999; 01-03-2010 non è uguale a 01-01-9999, ma è between 01-05-2010 and 31-05-2010, quindi il risultato è TRUE, come è TRUE su tutte le altre seguenti.
Non conoscendo la filosofia della ricerca è difficile essere più precisi, ma a prima vista sembra esserci un errore logico di interpretazione di Ap.Datafineattività, piuttosto che sula gestione delle OR e AND.

Ciao.


dinoxet Profilo | Senior Member

prova cosi :

WHERE (Ap.Datafineattivita = '01-01-9999' and Ap.Datafineattivita BETWEEN '01-05-2010' AND '31-05-2010') or
Ap.Datafineattivita = '01-01-9999' and (Ap.data1 BETWEEN '01-05-2010' AND '31-05-2010') OR
Ap.Datafineattivita = '01-01-9999' and (Ap.data2 BETWEEN '01-05-2010' AND '31-05-2010') OR
Ap.Datafineattivita = '01-01-9999' and (Ap.data3 BETWEEN '01-05-2010' AND '31-05-2010') OR
Ap.Datafineattivita = '01-01-9999' and (Ap.data4 BETWEEN '01-05-2010' AND '31-05-2010') OR
Ap.Datafineattivita = '01-01-9999' and (Ap.data5 BETWEEN '01-05-2010' AND '31-05-2010') OR
Ap.Datafineattivita = '01-01-9999' and (Ap.data6 BETWEEN '01-05-2010' AND '31-05-2010') OR
Ap.Datafineattivita = '01-01-9999' and (Ap.data7 BETWEEN '01-05-2010' AND '31-05-2010') OR
Ap.Datafineattivita = '01-01-9999' and (Ap.data8 BETWEEN '01-05-2010' AND '31-05-2010')

DINOXET
__________________________________________
impossible is only a word
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5