日期之间 - SQL Server 2008 - ASP.net

时间:2012-06-12 14:39:17

标签: asp.net sql sql-server-2008

我有这个查询

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 个答案:

答案 0 :(得分:2)

如果您的日期为DATEDATETIME数据类型,则只需使用:

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。