2016-08-24 127 views
-1

我有一個選擇,我只需要限制兩天的數據。所以今天是2016年8月24日,所以我需要獲得2016年8月24日,2016年8月23日和2016年8月22日的數據。我該怎麼做?我想我應該使用DATEADD函數,或類似的東西。它需要動態地完成。SQL Server:獲取「兩天前」日期

我需要這樣的:

SELECT * FROM TABLE_NAME WHERE 
DATE = '2016-08-22' 

日期必須每天都進行更新

回答

2
SELECT * FROM TABLE_NAME WHERE 
cast(DATE as date) >= cast(GETDATE()-2 as date) 

或 ──爲限制未來日期

SELECT * FROM TABLE_NAME 
    WHERE 
    cast(DATE as date) in (cast(GETDATE()-2 as date),cast(GETDATE()-1 as date), cast(GETDATE() as date)) 

使用GETDATE()功能

+0

你爲什麼使用CAST? – MegoSoft

+1

getdate()返回datetime。所以當比較完成時,它會比較日期和時間。我們只需要比較日期。如果日期列的類型爲'日期',則日期列不需要強制轉換。我認爲它是字符串 –

+0

Akshey,如果表中有未來的日期,您的查詢將返回它,但它不應該 –

3

使用DateAdd,正是

SELECT * FROM TABLE_NAME 
WHERE DATE BETWEEN dateadd(d,-2,cast(getDate() as date)) AND cast(getDate() as date) 
+0

'dateadd(d,-2,cast(getDate()as date))'這部分應該'投射爲日期',我認爲 –

+0

它將被隱含地鑄造。無論如何,結果將是相同的[日期]列是'日期'類型。演員陣容的主要原因是輪到getdate()。請參閱'select 1 where cast(getDate()as date)= dateadd(d,0,cast(getDate()as date))' – Serg

1
SELECT * FROM TABLE_NAME WHERE 
DATE >=cast(getdate()-2 as date)--so this will be rounded off to midnight and it is sargable 
2
SELECT * 
FROM TABLE_NAME 
WHERE cast(DATE as date) BETWEEN cast(DATEADD(D, -2, GETDATE()) as date) AND cast(GETDATE() as date) 
0

如果在此表將來的日期,你也許可以使用這個

select * from table_name 
where date <= getdate() 
and date >= dateadd(day,-2,getdate()) 
0

首先,你必須讓今天的日期在絕對通過轉換它漂浮在地板上,然後將其轉換成小日期時間。然後使用dateadd從今天的絕對日期減去2天。

SELECT * FROM 
TABLE_NAME 
WHERE 
DATE >= (SELECT DATEADD(dd,-2,CAST(FLOOR(CAST(GETDATE() as FLOAT)) as SMALLDATETIME))) 
相關問題