使用其列值过滤sql语句

时间:2013-07-17 04:07:33

标签: sql-server sql-server-2008

我有一个名为'Table1'的表。 它有3列即

1. vehicle Number
2. startdatetime
3. enddatetime

表格如下 - >

vehicleno |     startdatetime          | enddatetime |
1            2013/07/16 00:00:00       2013/07/17 00:00:00
2            2013/07/16 00:00:00       2013/07/18 14:00:00
3            2013/07/17 12:19:00       2013/07/20 17:35:00
4            2013/07/19 10:24:56       2013/07/19 20:14:00
5            2013/07/15 08:10:00       2013/07/18 09:10:00

现在我想要一个o / p,以便在执行查询时,如果当前日期时间在startdatetime和enddatetime之间,那么记录应该显示在我的o / p表中。

我尝试过查询..

select * from Table1 where startdatetime between '2013/07/17 00:00:00' and '2013/07/17 23:59:59' or enddatetime between '2013/07/17 00:00:00' and '2013/07/17 23:59:59'

但我没有得到我想要的结果。

请帮帮我..

4 个答案:

答案 0 :(得分:2)

如果您要查找当前日期,为何不使用GETDATE

  

将当前数据库系统时间戳记作为日期时间值返回   没有数据库时区偏移量。这个值来源于   SQL Server实例的计算机操作系统   正在运行。

这样的东西
select  * 
from    Table1 
where   GETDATE() BETWEEN startdatetime  AND enddatetime

SQL Fiddle DEMO

答案 1 :(得分:2)

我认为你想要这样做:

select vehicleno ,startdatetime, enddatetime
from table1
where getUTCDate() between startdatetime and enddatetime

如果您不在格林尼治标准时间,如果您说EST,则可以dateAdd(hour, 5, getUTCDate())

在select语句中指定要使用的列总是更正确。

此时由于我们生活在一个全球社区,我认为使用getUTCDate()而不是常规getDate()更合适,因为getDate()只是服务器所在的时区如果这适用于您的情况,它将取决于服务器的位置。

您可以看到GetUTCDate()

的定义

答案 2 :(得分:1)

尝试以下方法:

select * 
from Table1 
where GetDate() between startdatetime and enddatetime

GetDate()获取当前日期时间

答案 3 :(得分:0)

仅为记录,如果要在SQL中使用文字日期,请使用ISO日期格式(YYYY-MM-DD hh:mm:ss)。无论您的语言环境设置如何,这是唯一可以保证正确解释的格式。