2010-08-11 6 views
0

Bonjour à tous je veux rechercher des données de factures et client par date d'aujourd'hui J'utilise GETDATE()Recherche par date SQL Server 2005

par exemple deux tables

1 client

- ID int 
- Name Varcher 

2 Facture

- ID int 
- ClientID int 
- date Datetime 
- Total money 

q uery

Select * 
    from client c 
     inner join invoice i on c.id = i.ClientID 
    where i.date = getdate() 

résultat

nothing 

mais j'ai certaines données ont même date aujourd'hui

Répondre

1

Essayez suivant où la condition

WHERE DateDiff(dd, OrderDate, getdate()) = 0 
or 
WHERE Convert(varchar(20), OrderDate, 101) = Convert(varchar(20), getdate(), 101) 

Votre réponse est

Select * 
    from client c 
     inner join invoice i on c.id = i.ClientID 
    WHERE DateDiff(dd, i.date, getdate()) = 0 
+1

pas sargable, ne sera pas sur l'indice – SQLMenace

+0

merci Juin R –

+0

la requête est vrai, mais pourquoi écrire égal à 0 la syntaxe est DATEDIFF (datepart, startdate, enddate) s'il vous plaît répondre –

1

une façon

where i.date >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0), 
and i.date < DATEADD(dd, DATEDIFF(dd, 0, GETDATE())+1 , 0) 
+0

J'avais effacé ma réponse de toute façon et j'ai + vissé la tienne comme quand j'ai vu la tienne je me suis rendu compte que je n'avais pas pris en compte la possibilité de dates futures mais ça marche bien. Dans le plan d'exécution, le prédicat est 'CONVERT_IMPLICIT (datetime, datediff (jour, '1900-01-01 00: 00: 00.000', getdate()), 0)' qui est à peu près ce que le tien fait je pense. –

0

Essayez d'utiliser DATEPART au lieu de simplement getDate() (qui ne correspondent dates EXACTEMENT):

WHERE DATEPART(dy, GETDATE()) - DATEPART(dy, i.date) <= 1 

Cela vous donnera toutes les dates en une seule journée gamme.

+0

merci Jeremy –

1

GETDATE() renvoie à la fois la date et l'heure.

Nous devons fixer la date au début de la journée.

SELECT * 
FROM client c 
INNER JOIN invoice i 
    ON c.id = i.ClientID 
WHERE i.date >= CAST(FLOOR(CAST(GETDATE() AS float)) AS DATETIME) 
+0

aura également des dates futures – SQLMenace

+0

Juste jeté dans une variable, puis faire un entre: O i i.date ENTRE @todayDate ET @ todayDate + 1 – Simmo

+0

merci Simmo –

0

Select * from client c left join invoice i on c.id = i.ClientID where i.date = getdate()