1

我有这个查询

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 名称而没有数据)

4

4 回答 4

2

如果您的日期是DATEDATETIME数据类型,您可以简单地使用:

WHERE DateReceived >= '20120601'            --- at or after the 1st of June
  AND DateReceived < '20120608'             --- and before the 8th of June
于 2012-06-12T14:49:24.857 回答
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 开始。

于 2012-06-12T15:06:31.777 回答
1

尝试使用 DATEADD 函数获取最近 7 天的数据:

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

或者

WHERE DateReceived > DATEADD(day,-7, GETDATE())
于 2012-06-12T14:52:45.900 回答
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)

于 2012-06-12T14:44:54.877 回答