2014-12-09 33 views
1

我想写一个查询,其中的条款是当员工的开始日期是今天的日期。SQL选择where startdate是今天的日期

select * from tbl_employees 
where Startdate = getdate() 

的问题是,开始日期是“2014年12月9日00:00:00.000” 和功能getdate与日期和时间,如“2014年12月9日08回来:25:16.013 '

我该如何编写一个只考虑日期的查询?

+0

你使用的是什么版本的SQL? MySQL的? 2008年? – 2014-12-09 13:32:25

+0

我正在使用mircosoft sql 2008 – user2296463 2014-12-09 13:33:14

+0

可能的重复[如何仅返回日期部分从SQL Server日期时间数据类型](http://stackoverflow.com/questions/113045/how-to-return-the-date-part - 只从 - 一个-SQL服务器的日期时间,数据类型) – BenR 2014-12-09 13:55:27

回答

3

你只想要日期部分。简单的方法是:

select * 
from tbl_employees 
where cast(Startdate as date) = cast(getdate() as date); 

但是,如果要使用索引,最好不要在函数调用中使用列。所以,这是更好的:

where (StartDate >= cast(getdate() as date) and StartDate < cast(getdate() + 1 as date)) 
2
select * from tbl_employees 
where CONVERT(VARCHAR(10),Startdate,110) = CONVERT(VARCHAR(10),GETDATE(),110) 
0

您可以使用只比较日期部分不time..some东西一样

IF CAST(DateField1 AS DATE) = CAST(DateField2 AS DATE) 

OR

CONVERT(VARCHAR(10), GETDATE(), 112) 
0
SELECT CONVERT (date, SYSDATETIME()) 
    ,CONVERT (date, SYSDATETIMEOFFSET()) 
    ,CONVERT (date, SYSUTCDATETIME()) 
    ,CONVERT (date, CURRENT_TIMESTAMP) 
    ,CONVERT (date, GETDATE()) 
    ,CONVERT (date, GETUTCDATE()); 

/* Returned 
SYSDATETIME()  2007-05-03 
SYSDATETIMEOFFSET()2007-05-03 
SYSUTCDATETIME() 2007-05-04 
CURRENT_TIMESTAMP 2007-05-03 
GETDATE()   2007-05-03 
GETUTCDATE()  2007-05-04 
*/ 

从:http://msdn.microsoft.com/en-us/library/ms188751.aspx

所以使用这些中的任何一个都会给你日期