Sql server 如何按SQL语句中没有时间组件的日期范围进行筛选
示例查询Sql server 如何按SQL语句中没有时间组件的日期范围进行筛选,sql-server,Sql Server,示例查询 SELECT * FROM orders WHERE New_ActualDate >= @fromdate AND New_ActualDate <= @todate q.Parameters.AddWithValue("@fromdate", calFrom.SelectedDate); q.Parameters.AddWithValue("@todate", calTo.SelectedDate); 当我检查参数值时,它们是: @fromdate='01/08/2
SELECT * FROM orders WHERE New_ActualDate >= @fromdate AND New_ActualDate <= @todate
q.Parameters.AddWithValue("@fromdate", calFrom.SelectedDate);
q.Parameters.AddWithValue("@todate", calTo.SelectedDate);
当我检查参数值时,它们是:
@fromdate='01/08/2016 00:00:00'
@todate='2016年8月31日00:00:00'
我看到的问题是,从昨天到8月31日的所有订单都从报告中丢失了
在这个例子中,我还需要设置时间吗?诀窍是使用明天的日期并更改给出的答案将起作用,这是处理组合日期/时间字段的好方法。然而,这可能值得你或其他读者了解另一种解决方案——为什么在你不需要的时候处理事情 SQLServer支持一种日期数据类型,它的作用与您期望的完全相同:它只存储日期,不存储时间戳。这有一些大小方面的好处,还可以帮助您避免编写混乱的查询来处理时间戳
如果新的_ActualDate列只是一个日期,那么它可以而且我认为应该使用date而不是datetime或datetime2。然后,您可以只将参数的日期部分传递给它,您的查询将如您最初所希望的那样工作。我认为BETWEEN语法非常简洁。为了使用它,我们有一个扩展名为.EndOfDay 所以我可能会用以下方式来写: 任何语言都应该支持类似的东西 SQL语句 参数
如果列New_ActualDate包含时间,请将您的查询更改为和New_ActualDate
SELECT * FROM orders WHERE New_ActualDate >= @fromdate AND New_ActualDate < @todatePlusOne
q.Parameters.AddWithValue("@fromdate", calFrom.SelectedDate);
q.Parameters.AddWithValue("@todatePlusOne", calTo.SelectedDate.AddDays(1));
public static DateTime EndOfDay(this DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0, dateTime.Kind).AddDays(1).AddMinutes(-1);
}
SELECT *
FROM orders
WHERE New_ActualDate BETWEEN @fromdate AND @todate
q.Parameters.AddWithValue("@fromdate", calFrom.SelectedDate);
q.Parameters.AddWithValue("@todate", calTo.SelectedDate.EndOfDay());