2013-07-30 45 views
1

我已经在SQL Server 2008中的以下表(称为“act_events”):与今天的日期选择项的SQL查询

enter image description here

当你注意到一些日期时间被格式化:“YYYY-MM -dd”,有的:‘YYYY-MM-DD’一些奇怪的原因,我还没有想出..

我有一个查询,如下所示:

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

,我想选择e只与今天的日期排气。

但我想不通的方式来选择这两种格式..

我尝试此查询:

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))) 

但它仅适用于特定的日期..

盼能答案。

另外,如果有,将改变所有日期时间来纠正我很想听听格式的语句。

+5

对我来说,最有可能的SQL服务器,所有的日期似乎格式YYYY-MM-DD? – Recipe

+0

@Recipe我想,但你有2013年1月8日之后2013年7月16日。我认为OP有一个区分英国和美国日期格式的问题。 –

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

+0

您应该使用'WHERE e_start> = AND e_start < gvee

+0

此外,你可以简化最后一部分为'DateAdd(dd,DateDiff(dd,0,GetDate())+ 1,0)' – gvee

+0

@gvee你是对的,其中包含'> =和<=' –

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

+0

期望的日期去数字的地方?究竟如何? – Dvirski

+0

@Dvirski [CONVERT(nvarchar(30),GETDATE(),112)](http://msdn.microsoft.com/zh-cn/library/ms187928.aspx)将日期转换为'YYYYMMDD'格式,所以今天我们得到(date_c,1,4)+ substring(date_c,6,2)+ substring(date_c,9,2)''''substring(date_c)'20130730'现在我们必须从给定的varchar日期组成这个字符串,'1,4')+子串(日期_c,9,2)+子串(日期_c,6,2)'用于不同日期演示'YYYY-MM-DD'和'YYYY-DD-MM' – valex