2010-08-11 115 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()