2012-06-12 76 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

相关问题