Ho un impiegato tabella contenente informazioni Impiegato come indicato di seguito:SQL Server - trovare persone tra intervallo di date escludendo l'anno
ID NAME DOB
1 ABC 1974-01-01
2 BDS 1984-12-31
3 QWE 1959-05-27
and so on
voglio elencare tutti i dipendenti il cui DOB è nel range indicato.
select * from EMPLOYEE where DOB BETWEEN '1970-01-01' AND '1980-02-27'
Ho una condizione di filtro per 'includere anno rispetto della data', che una volta selezionato 'NO', il giorno dei dipendenti DOB e DOB mese solo dovrebbe essere considerato per il confronto. e non l'anno.
Ad esempio: Se entro l'intervallo di date come '1970-01-01' e '1980/02/27' ed il filtro è stato selezionato come 'NO', allora si deve cercare solo i dipendenti il cui DOB è maggiore di uguale a JAN-01 e inferiore a quello di FEB-27.
Se selezionato 'Sì', è semplicemente l'intervallo di date indicato nella query precedente.
Ecco quello che ho provato finora:
select * from EMPLOYEE where DOB BETWEEN '1970-01-01' AND '1980-02-27'
AND MONTH(DOB) >= CASE WHEN 'NO'='NO' THEN MONTH('1970-01-01')
ELSE MONTH(DOB) END
AND MONTH(DOB) <= CASE WHEN 'NO'='NO' THEN MONTH('1980-02-27')
ELSE MONTH(DOB) END
AND DAY(DOB) >= CASE WHEN 'NO'='NO' THEN DAY('1970-01-01')
ELSE DAY(DOB) END
AND DAY(DOB) <= CASE WHEN 'NO'='NO' THEN DAY('1980-02-27')
ELSE DAY(DOB) END
Funziona quando passo l'intervallo di date in cui la data FROM ha minore mese numero rispetto al TO data mese.
Ad esempio: Non funziona quando si passa l'intervallo di date come '1970-12-01' a '1980-01-31'. Dovrebbe elencare i dipendenti il cui DOB è in dicembre e gennaio mese.
Hai bisogno di aiuto per favore.
guardando le specifiche per la ricerca, quindi se si omette il confronto dell'anno, la query non dovrebbe restituire risultati. Dato che senza il confronto dell'anno, nessuno ha un compleanno dopo il 1 ° dicembre e prima del 31 gennaio – JamieA
@JamieA - cosa intendi? Chiunque sia nato in un qualsiasi giorno di dicembre o di gennaio soddisfa il criterio. – Smeeheey
Se sostituisco le date nella 4a frase con le date del test, viene visualizzato "Se inserisco l'intervallo di date come" 1970-12-01 "e" 1980-01-31 "e il filtro è selezionato come" NO ", quindi dovrebbe cercare solo quei dipendenti il cui DOB è maggiore di uguale a Dec-01 e inferiore a quello di JAN-31 ". che non è nessuno – JamieA