我有这个查询
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
格式检索日期。
我不知道如何在搜索中正确使用日期函数(我猜这就是为什么我在日期之间搜索时无法获取任何数据,因为我只显示了col名称而没有数据)
答案 0 :(得分:2)
如果您的日期为DATE
或DATETIME
数据类型,则只需使用:
WHERE DateReceived >= '20120601' --- at or after the 1st of June
AND DateReceived < '20120608' --- and before the 8th of June
答案 1 :(得分:1)
您可以使用转换功能来比较不包括时间比较的日期。
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 :(得分:1)
尝试使用DATEADD函数获取最近七天的数据:
WHERE DateReceived > DATEADD(day,-7, getutcdate())
或
WHERE DateReceived > DATEADD(day,-7, GETDATE())
答案 3 :(得分: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代码中,您只需使用Date
对象的DateTime
属性来仅传递日期部分。:
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。