2013-07-30 78 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