SQL中特定日期限制内的订单日期

时间:2017-05-24 17:00:44

标签: sql sql-server

我正在处理购物车放弃项目,我正在处理通过程序获取数据。在此过程中,我想向在今天前两天下订单的人发送关于购物车的提醒。也就是说,如果今天是24日,我想向22日向购物车添加商品的人发送提醒。

So orderdate = 5/22/2017, 
@lagdays = getdate()-3 = 5/21/2017, 
@seldate = getdate() = 5/24/2017.

当我运行查询时,我需要单独在22日发出的所有订单。以下是我的询问。

select * from ordertable o where ((o.orderdate > @LagDays ) and (o.orderdate <  @seldate ))

但是,此查询使用orderdate 22,23,24获取所有订单。怎么解决这个?

3 个答案:

答案 0 :(得分:0)

select * from ordertable o where((o.orderdate&gt; DATEADD(day,DATEDIFF(day,2,GETDATE()),0))和(o.orderdate&lt; DATEADD(day,DATEDIFF(day,1) ,GETDATE()),0)))

感谢@ahmed abdelqader提出建议

答案 1 :(得分:0)

我怀疑该表使用的是DATETIME类型 虽然该SQL试图将它与DATES的变量进行比较。

因此,在将该字段与日期进行比较之前,您可以先将该字段强制转换为日期 通过强制转换,您基本上可以从中删除时间部分。

select *
from ordertable o
where cast(o.orderdate as date) > @lagdays and cast(o.orderdate as date) < @seldate;

以下是仅使用变量演示的示例:

declare @lagdays DATE = GetDate()-3;
declare @seldate DATE = GetDate();

declare @ordertable table (id int identity(1,1), orderdate datetime);

insert into @ordertable (orderdate) values 
(GetDate()-4),
(GetDate()-3),
(GetDate()-2),
(GetDate());

select orderdate, cast(orderdate as date) as orderdate_as_date, @lagdays as lagdays, @seldate as seldate
from @ordertable 
where cast(orderdate as date) > @lagdays and cast(orderdate as date) < @seldate;

答案 2 :(得分:0)

使用下一个代码: -

select * from ordertable o 
where ((o.orderdate > DATEADD(day, DATEDIFF(day, 2, GETDATE()), 0) ) 
and (o.orderdate < DATEADD(day, DATEDIFF(day, 1, GETDATE()), 0) ))

方法取决于只在没有时间的情况下获取日期。

所以如果今天是24日,那么标准将在

之内
2017-05-22 00:00:00.000

&安培;

2017-05-23 00:00:00.000