2010-08-11 112 views
0

大家好,我想今天的日期 搜索從發票和客戶數據我使用GETDATE()按日期SQL服務器搜索2005

例如兩個表

1客戶

- ID int 
- Name Varcher 

2發票

- 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() 

結果

nothing 

,但我有一些數據具有相同的日期今天

回答

1

嘗試以下where條件

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

所以你的答案是

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

不優化搜索,不會使用索引 – SQLMenace 2010-08-11 12:59:39

+0

謝謝六月[R – 2010-08-11 13:00:49

+0

查詢是事實,但爲什麼寫等於0 的語法DATEDIFF(日期部分,開始日期,結束日期) 請回答我 – 2010-08-11 13:27:00

1

單程

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

無論如何,我已經刪除了我的答案,並將其+1,因爲當我看到你的時候,我意識到我沒有考慮未來日期的可能性,但它工作正常。在執行計劃中謂詞是'CONVERT_IMPLICIT(datetime,datediff('1900-01-01 00:00:00',getdate()),0)'這幾乎與你的想法一致。 – 2010-08-11 13:08:55

0

嘗試使用,而不是DATEPART只是GETDATE()(只將完全匹配日期):

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

這將使你在一天的所有日期範圍。

+0

謝謝你Jeremy – 2010-08-11 13:06:11

1

GETDATE()返回日期和時間。

我們需要將日期定在今天的開始。

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

也將得到未來的日期 – SQLMenace 2010-08-11 13:02:01

+0

只需投入一個變量,然後做一個之間: 哪裏i.date BETWEEN @todayDate和@ todayDate + 1 – Simmo 2010-08-11 13:04:14

+0

謝謝Simmo – 2010-08-11 13:07:41

0

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