我正在处理购物车放弃项目,我正在处理通过程序获取数据。在此过程中,我想向在今天前两天下订单的人发送关于购物车的提醒。也就是说,如果今天是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获取所有订单。怎么解决这个?
答案 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