用于选择具有今天日期的条目的SQL查询

时间:2013-07-30 12:14:48

标签: sql sql-server sql-server-2008 select

我在sql server 2008中有下表(称为“act_events”):

enter image description here

正如你注意到一些日期时间被格式化:“yyyy-mm-dd”和一些:“yyyy-dd-mm”出于某些奇怪的原因我仍然没有想到..

我的查询如下:

SELECT * from act_events
WHERE '2013-07-30'>=(CAST(e_start as DATE)) AND 
      '2013-07-30'<=(CAST(e_end as DATE))

我想在今天的日期选择活动。

但我想办法选择这两种格式..

我尝试了这个查询:

SELECT * from act_events 
WHERE( @date1>=(CAST(e_start as DATE)) AND
        @date2<=(CAST(e_end as DATE)) ) OR
      ( @date3>=(CAST(e_start as DATE)) AND
        @date4<=(CAST(e_end as DATE)) )

但它只适用于某些日期..

非常感谢您的回答。

此外,如果有一个声明会将所有日期时间更改为正确的格式,我很乐意听到。

2 个答案:

答案 0 :(得分:1)

假设日期确实属于DateTime类型,在这种情况下你可以做的是使用dateadd和datediff。

运行以下两个陈述:

-- Todays date, date part only
select dateadd(dd, 0, datediff(dd, 0, getdate()))
-- Tomorrows date, date part only
select dateadd(dd, 0, datediff(dd, 0, dateadd(dd, 1, getdate())))

使用这两个,你可以这样做(包括编辑,谢谢@gvee)

select *
from act_events 
where 
        e_start >= dateadd(dd, 0, datediff(dd, 0, getdate())) 
    and 
        e_end < dateadd(dd, 0, datediff(dd, 0, getdate()) + 1)

我应该提到getdate()是SQL Server中的内置函数。当然,如果您在存储过程中使用此变量,则可以将其更改为变量。

作为旁注,SQL Server中的日期实际上是一个数字。当你看到它时出现的格式是人类和人类不可信任的,对吗?

答案 1 :(得分:0)

select *

from t 
where 
   CONVERT(nvarchar(30), GETDATE(), 112)=substring(date_c,1,4)
       +substring(date_c,6,2)
       +substring(date_c,9,2)
   or
   CONVERT(nvarchar(30), GETDATE(), 112)=substring(date_c,1,4)
       +substring(date_c,9,2)
       +substring(date_c,6,2)

SQLFiddle demo