工作,我有一个非常简单的SQL从一个范围的日期的选择数据。因此,例如,如果我有,日期间未在SQL SERVER
SELECT ...... WHERE PV.[Time] BETWEEN '02/26/2014' AND '02/26/2014'
此SQL Select语句未在02/26/2014中选择数据。请帮助
工作,我有一个非常简单的SQL从一个范围的日期的选择数据。因此,例如,如果我有,日期间未在SQL SERVER
SELECT ...... WHERE PV.[Time] BETWEEN '02/26/2014' AND '02/26/2014'
此SQL Select语句未在02/26/2014中选择数据。请帮助
您当前的声明BETWEEN '02/26/2014' AND '02/26/2014'
对左边和右边的值相同,因此相当于= '02/26/2014'
。
这只会带回排在午夜2月26日使用
WHERE PV.[Time] >= '20140226' AND PV.[Time] < '20140227'
意味着这不会花时间。把26日的所有记录带上? – user960567
@ user960567 - 是的,无论时间分量如何,这都会带回第26位的所有行。 –
非常好。赞赏 – user960567
最好在日期中使用不可疑的字符串格式(根据您的本地设置,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');
你是什么意思? – user960567
你是对的,@马丁史密斯,我知道这个边缘案例,但没有认为是重要的。代码被纠正为完全正确。 –
应该转换格式,['CONVERT'](http://msdn.microsoft.com/en-us/library/ ms187928.aspx) – Alexander
那么 - 有没有行的时间等于02/26/2014? 如果是这样,你的SQL Server是否设置为处理这种格式的日期?如果您尝试将查询更改为:'20142602'和'20142602' –
请不要在此处使用“BETWEEN”。除非意图包括那些在2月26日正好是午夜但在那天没有其他时间的行。 –