Range data inizio e data fine

mercoledì 02 giugno 2010 - 01.55

dandi.box Profilo | Junior Member


Ciao, ho una SP che tra le altre condizioni WHERE effettua un controllo su DataInizio e DataFine

dato che passo da codice una stringa (e non un datetime) ho cercato di utilizzare un passaggio "abbastanza" universale

YYYYMMDD (esempio 20100601)


ALTER PROCEDURE [dbo].[spDipendente_SearchList]
@IDDipendente int = null,
@IDSocieta int = null,
@DataInizio varchar(8) = null,
@DataFine varchar(8) = null

AS



SELECT
... FROM
Dipendenti
((DipendentiCorsi.DataCorso >= @DataInizio OR @DataInizio IS NULL) AND (DipendentiCorsi.DataCorso <= @DataFine OR @DataFine IS NULL)) AND
...


Sembra non funzionare... ottengo sempre 0 risultati!


cosa sbaglio?

Thanks











lbenaglia Profilo | Guru

>Sembra non funzionare... ottengo sempre 0 risultati!
Si vede che non esistono righe che soddisfano la condizione di WHERE.
Anche in questo caso devi postare un esempio completo con le CREATE TABLE di tutte le tabelle, la CREATE PROCEDURE completa, alcune righe di prova di tutte le tabelle (INSERT INTO) e qualche esempio di chiamata della sp con relativi parametri di input ed i result set attesi.

>Thanks
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

nico839 Profilo | Senior Member

ciao,
se nella tabella le date sono in formato datetime
prova con
CONVERT(CHAR(8), DataCorso, 112)

cioè

SELECT FROM Dipendenti where ((CONVERT(CHAR(8), DipendentiCorsi.DataCorso , 112)>= @DataInizio OR @DataInizio IS NULL) AND (CONVERT(CHAR(8), DipendentiCorsi.DataCorso, 112) <= @DataFine
Ciao.
Nicolas

lbenaglia Profilo | Guru

>se nella tabella le date sono in formato datetime
>prova con
>CONVERT(CHAR(8), DataCorso, 112)

Ciao Nicolas,

Questo renderebbe inverosimilmente lenta l'esecuzione della query in quanto verrebbero castate TUTTE le righe della tabella prima di eseguire il filtro sui dati.
Una stringa nel formato 'YYYYMMDD' viene implicitamente castata a datetime se viene utilizzata in una espressione con variabili/colonne datetime in quanto datetime ha una precedenza maggiore rispetto a char/varchar:
http://msdn.microsoft.com/en-us/library/ms190309.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

nico839 Profilo | Senior Member

cavolo!e io che nella mia ignoranza continuavo a convertire tutto!grazie mille!
Ciao.
Nicolas
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