2012-06-12 75 views
1

我有這個疑問日期間 - SQL Server 2008中 - ASP.net

WITH NumberedRows AS 
(
    SELECT Serial, 
      DateReceived, 
      DeviceLevel, 
      ROW_NUMBER() OVER (ORDER BY DateReceived) AS RowNumber 
    FROM TBLReadings 
) 
SELECT * 
FROM NumberedRows 
WHERE RowNumber % 5 = 1 and Serial like '+447584996153' 

我需要日之間搜索 - 過去7天。我知道搜索..

WHERE DateReceived BETWEEN 'blahblah' and 'blahblah' 

但是什麼是功能?我已經嘗試過不同的格式來專門調用日期。

當前數據以dd/mm/yyyy 00:00:00格式檢索日期。

我不知道如何在搜索正確使用功能日期(我猜這就是爲什麼我不能得到任何數據,當我日期之間的搜索,因爲我只是表明山坳名,沒有數據)

+0

您是否計劃將日期值作爲參數傳遞給查詢? – Thomas

+0

是的@ @ Thomas – Brobina

回答

1

嘗試使用DATEADD函數獲取最近七天的數據:

WHERE DateReceived > DATEADD(day,-7, getutcdate()) 

WHERE DateReceived > DATEADD(day,-7, GETDATE()) 
1

您可以使用Convert函數比較排除時間比較的日期。

Select Convert(varchar(12),GetDate(),112)以YYYYMMDD格式

因此,在您的查詢的情況下,這將返回日期也可以是WHERE Convert(varchar(12,DateReceived,112) BETWEEN Convert(varchar(12,DateFrom,112) and Convert(varchar(12,DateTo,112)

2

如果您的日期是DATEDATETIME數據類型的,你可以簡單地使用:

WHERE DateReceived >= '20120601'   --- at or after the 1st of June 
    AND DateReceived < '20120608'    --- and before the 8th of June 
1

如果您在傳遞的日期值作爲參數傳遞給查詢規劃,那麼你可以簡單地讓.NET處理時間的剝離:

WITH NumberedRows AS 
(
    SELECT Serial, 
      DateReceived, 
      DeviceLevel, 
      ROW_NUMBER() OVER (ORDER BY DateReceived) AS RowNumber 
    FROM TBLReadings 
    Where DateReceived >= @Date1 
     And DateReceived < DateAdd(d,8,@Date1) 
) 
SELECT * 
FROM NumberedRows 
WHERE RowNumber % 5 = 1 and Serial like '+447584996153' 

在你.NET代碼,如果您傳遞日期值,則只需使用DateTime對象的Date屬性即可僅通過日期部分。:

myCommandVar.AddParameterWithValue(myDateVar.Date); 

另一種選擇,如果你總是想用今天的日期,你不希望傳遞的參數會像這樣:

Where DateReceived >= DateAdd(d, DateDiff(d, 0, CURRENT_TIMESTAMP), 0) 
     And DateReceived < DateAdd(d, DateDiff(d, 0, CURRENT_TIMESTAMP), 8) 

在這種情況下,我剝從時間部分通過計算從第0天開始的天數,然後將該天數添加到0.請注意,在第二部分中,我從第8天開始。

+0

什麼是使用參數的最佳方式?默認值?要麼? – Brobina

+0

@OliverBush - 最好的方法是最適合手頭問題的方法;)。一般來說,如果沒有更多細節,很難回答這個問題,您不希望使用連接在您的ASP.NET代碼中構建SQL字符串。相反,你會希望你的SQL語句有些靜態(通常是一個常量),而你的參數傳遞給Command對象。 – Thomas

+0

@OliverBush - 如果您詢問如何處理DateReceived爲null的可能性,並且您希望返回true的行,那麼您會將Where語句更改爲Where WhereReceived爲空或(DateReceived> = @Date和DateReceived Thomas

相關問題