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

日期介于-SQL Server 2008-ASP.net之间,asp.net,sql,sql-server-2008,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

我有这个疑问

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格式的日期


我不知道如何在搜索中正确使用日期函数我猜这就是为什么我在日期之间搜索时无法获得任何数据,因为我只显示列名称,没有数据

您可以使用转换函数来比较日期,不包括时间比较

选择Convertvarchar12,GetDate,112这将返回yyyyMMdd格式的日期


因此,在您的查询中,它可以是Convertvarchar12,DateReceived,112之间的Convertvarchar12,DateFrom,112和Convertvarchar12,DateTo,112

您可以使用Convert函数来比较不包括时间比较的日期

选择Convertvarchar12,GetDate,112这将返回yyyyMMdd格式的日期

因此,在您的查询中,它可以是Convertvarchar12,DateReceived,112在Convertvarchar12,DateFrom,112和Convertvarchar12,DateTo,112之间的Convertvarchar12,DateTo,112

WHERE DateReceived >= '20120601'            --- at or after the 1st of June
  AND DateReceived < '20120608'             --- and before the 8th of June
如果您的日期是日期或日期时间数据类型,您只需使用:

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

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

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


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

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


如果计划将日期值作为参数传递给查询,则可以简单地让.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'
另一种选择是,如果您总是想使用今天的日期,而不想传递参数,则如下所示:

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

在这个场景中,我将从当前日期和时间中剥离时间部分,方法是计算自日期0起的天数,然后将该天数添加到0。请注意,在第二部分中,我是从日期8开始的。

如果您计划将日期值作为参数传递给查询,那么您可以简单地让.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'
另一种选择是,如果您总是想使用今天的日期,而不想传递参数,则如下所示:

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

在这个场景中,我将从当前日期和时间中剥离时间部分,方法是计算自日期0起的天数,然后将该天数添加到0。请注意,在第二部分中,我从日期8开始。

是否计划将日期值作为参数传递给查询?是否计划将日期值作为参数传递给查询?使用参数的最佳方式是什么?默认值?或者?@OliverBush——最好的方法是最适合眼前问题的方法;。如果没有更多细节,很难回答这个问题。不过,一般来说,您不希望在ASP.NET代码中使用连接来构建SQL字符串。相反,您会希望SQL语句在某种程度上是静态的,通常是一个常量,带有传递到命令对象中的参数。@OliverBush-如果您询问如何处理DateReceived为null的可能性,并且希望返回为true的行,然后您可以将Where语句更改为Where DATESERVICED为Null或DATESERVICED>=@Date和DATESERVICED=@Date和DATESERVICED