2016-03-15 12 views
6

Sto provando a creare un report che recuperi i record da un database di SQL Server in cui la data di consegna è oggi.Come confrontare solo la parte della data quando la data di consegna è oggi

Ho provato

select * from (tablename) 
where delivery_date = getdate() 

Anche se questo non mi ha dato tutti gli errori, ma non mi ha dato tutti i record sia.

Sto assumendo che sia perché sono come tutte le date:

2016-03-15 00:00:00.000 

Forse, ho bisogno di troncare la data per rimuovere il time-stamp e quindi provare?

+0

Puoi lanciare 'getdate()' su 'date' - questa operazione interromperà il tempo. Oppure usa l'intervallo di date se "delivery_date' memorizzato può contenere anche del tempo (se è così suggerirei di usare questo approccio invece di castare entrambi i lati su' date'). –

risposta

11

si può provare una query come sotto

select * from (tablename) 
where CAST(delivery_date as date) = CAST(getdate() as date) 

Anche se tutti i termini di consegna sono part-time come 00:00:00.000 di sicuro poi

select * from (tablename) 
where delivery_date = CAST(getdate() as date) 

avrebbe funzionato come buona.

+1

Se tutte le date di consegna non hanno una porzione di tempo, prendi in considerazione anche la modifica del tipo di colonna in DATE per risparmiare spazio. –

+0

GRAZIE molto Dhruv. Ho provato questo codice e ha funzionato. Badi Mehrbaani aapki. Grazie ancora. – user1777929

+0

@ user1777929 Il tuo commento ha reso la mia giornata :) – DhruvJoshi

3

Se delivery_date è sempre a mezzanotte (00:00:00.000), quindi confrontare in questo modo:

select * from (tablename) 
where delivery_date = datediff(d, 0, getdate()) 

Utilizzando datediff come questo è un modo rapido per troncare la parte di tempo di un valore datetime.

0

È necessario rimuovere la parte relativa all'ora del campo delivery_date E il valore GETDATE().

SELECT * 
FROM (tablename) 
WHERE DATEADD(dd, DATEDIFF(dd, 0, delivery_date), 0) = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) 
1

Vorrei solo creare 2 parametri. Uno per StartTime e uno per EndTime e utilizzare quelli nella mia query.

DECLARE @StartTime DATETIME, 
     @EndTime DATETIME 

SET @StartTime = DATEDIFF(d,0,GETDATE()) 
SET @EndTime = DATEADD(d,1,@StartTime) 

SELECT * 
FROM [tablename] 
WHERE delivery_date >= @StartTime 
     AND delivery_date < @EndTime 
0

Prova questo:

DECLARE @Today DATETIME SET @ Oggi = CONVERTI (data, GETDATE())

SELECT * FROM (nometabella) dove delivery_date = @Today

Problemi correlati