1

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

在此处输入图像描述

正如您注意到的一些日期时间的格式:“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)) )

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

将不胜感激您的回答。

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

4

2 回答 2

1

假设日期确实是 type 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 中的日期实际上是一个数字。当你看到它时出现的格式是人类的,人类是不可信的,对吧?

于 2013-07-30T12:25:11.120 回答
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 演示

于 2013-07-30T12:30:10.887 回答