2011-09-29 62 views
0

我在SQL Server 2005中选择日期时遇到问题。表名称为Softskill,列名为insertdate。数据以这种格式存储为2011-09-22 08:50:28.000。在SQL Server 2005中无时间选择日期值

要选择,我将前端的值作为'2011-09-22'传递,我的意思是仅限日期。

我试图用

SELECT INSERTDATE FROM SOFTSKILL WHERE INSERTDATE = '2011-09-22'. 

但它没有显示记录。我可以知道该列所遵循的格式,是否有任何方法通过仅使用日期来检索数据?

回答

3

您想要搜索涵盖一天的时间范围。喜欢的东西:

SELECT INSERTDATE 
    FROM SOFTSKILL 
    WHERE INSERTDATE >= '2011-09-22 00:00:00' 
     AND INSERTDATE < '2011-09-23 00:00:00' 

您也可以应用功能INSERTDATE只提取日期部分,但是,这将使查询nonsargable

+0

嗨,我从前端通过日期值,我无法通过下一个日期也.. –

+0

@NAVEENKUMAR:这只是一个快速样本。你可以计算下一个日期,对吧? –

+1

对于nonsargable这个词的+1 –

3
SELECT * 
FROM SOFTSKILL 
WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, InsertDate)) = '2011-09-22' 
0

这会做你需要什么

SELECT INSERTDATE 
FROM SOFTSKILL 
WHERE CAST(FLOOR(CAST(INSERTDATE AS FLOAT)) AS DATETIME) = '2011-09-30' 

需要截断INSERTDATE所以它的时间的部分是00:00:00.000;那么假设INSERTDATE是'2011-09-30 XX:XX:XX.xxx',那么它将等于'2011-09-30'。

+0

关于truncating datetime的相关有用的问题:http://stackoverflow.com/questions/923295/how-to-truncate-a-datetime-in-sql-server – daniloquio