2014-02-26 69 views
0

工作,我有一个非常简单的SQL从一个范围的日期的选择数据。因此,例如,如果我有,日期间未在SQL SERVER

SELECT ...... WHERE PV.[Time] BETWEEN '02/26/2014' AND '02/26/2014' 

此SQL Select语句未在02/26/2014中选择数据。请帮助

+1

应该转换格式,['CONVERT'](http://msdn.microsoft.com/en-us/library/ ms187928.aspx) – Alexander

+3

那么 - 有没有行的时间等于02/26/2014? 如果是这样,你的SQL Server是否设置为处理这种格式的日期?如果您尝试将查询更改为:'20142602'和'20142602' –

+1

请不要在此处使用“BETWEEN”。除非意图包括那些在2月26日正好是午夜但在那天没有其他时间的行。 –

回答

2

您当前的声明BETWEEN '02/26/2014' AND '02/26/2014'对左边和右边的值相同,因此相当于= '02/26/2014'

这只会带回排在午夜2月26日使用

WHERE PV.[Time] >= '20140226' AND PV.[Time] < '20140227' 
+0

意味着这不会花时间。把26日的所有记录带上? – user960567

+0

@ user960567 - 是的,无论时间分量如何,这都会带回第26位的所有行。 –

+0

非常好。赞赏 – user960567

1

最好在日期中使用不可疑​​的字符串格式(根据您的本地设置,1/2/2000可以解释为01-feb-2000或02-jan-2000)。我更喜欢ISO格式yyyymmdd或ODBC规范yyyy-mm-dd并始终使用CONVERT处理日期时,要明确。但这不是你的问题:)

你的查询的问题是,你实际上是在过滤日期BETWEEN '02/26/2014 00:00:00' AND '02/26/2014 00:00:00',因此你只能得到完全在日期时间的值。要通过02/26/2014整天得到datetime值使用以下命令:

SELECT ... 
WHERE PV.[Time] >= '2014-02-26' AND PV.[Time] < dateadd(day, 1, '2014-02-26'); 
+0

你是什么意思? – user960567

+0

你是对的,@马丁史密斯,我知道这个边缘案例,但没有认为是重要的。代码被纠正为完全正确。 –