web-dev-qa-db-fra.com

Comment comparer uniquement la partie date lorsque la date de livraison est aujourd'hui

J'essaie de créer un rapport qui obtient des enregistrements d'une base de données SQL Server où la date de livraison est aujourd'hui.

J'ai essayé

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

Bien que cela ne m'ait pas donné d'erreurs, cela ne m'a donné aucun enregistrement non plus.

Je suppose que c'est parce que toutes les dates sont comme:

2016-03-15 00:00:00.000

Peut-être que je dois tronquer la date pour supprimer l'horodatage, puis essayer?

14
user1777929

Vous pouvez essayer une requête comme ci-dessous

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

De plus, si toutes les dates de livraison ont une partie de temps comme 00:00:00.000 bien sûr alors

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

fonctionnerait aussi bien.

37
DhruvJoshi

Si la date de livraison est toujours minuit (00:00:00.000), puis comparez-le comme ceci:

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

L'utilisation de datediff comme ceci est un moyen rapide de tronquer la partie temporelle d'une valeur datetime.

3
SlimsGhost

Je viens de créer 2 paramètres. Un pour StartTime et un pour EndTime et utilisez ceux de ma requête.

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
2
JamieD77

Essaye ça:

DECLARE @Today DATETIME
SET @Today= CONVERT(date, getdate())

select * from (tablename)
where delivery_date = @Today
0
Rajashekar V

Vous devez supprimer la partie heure du champ delivery_date ET la valeur GETDATE ().

SELECT *
FROM  (tablename)
WHERE DATEADD(dd, DATEDIFF(dd, 0, delivery_date), 0) = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)
0
M. Ruiz