我有一个包含日期(smalldatetime)的事件表。
我有一个间隔(int)(前几天)的表格,用于发送提醒的时间 - DATEADD(D, *interval*, GETDATE())
。
我正在尝试编写一个SQL语句来获取今天应该发送提醒的所有事件(基于来自DATEADD函数的GETDATE()
。这不是我首先获取所有间隔并运行SQL在循环中,将每个间隔作为参数传递给DATEADD函数。
我有什么想法吗?
**dbo.events**
id (int) PK
date (smalldatetime)
customerID (int)
**dbo.intervals**
id (int) PK
daysBefore (int)
customerID (int)
答案 0 :(得分:3)
是。你应该自己尝试一下
create table t(val int);
insert into t values(4),(7),(10)
select DATEADD(D, val, GETDATE()) from t
答案 1 :(得分:1)
答案是肯定的。由于缺乏提供的信息,我无法为您绘制此查询。但是,你可以。
举个例子:
MyTable:
ID Interval Date
1 1 10-10-2001
SELECT ID, DATEADD(D, Interval, GETDATE()) AS NewDate FROM MyTable
SELECT e.*
FROM [events] e
INNER JOIN [interval] i on e.customerID = i.customerID
WHERE e.date = DATEADD(D, i.daysBefore,
DATEADD(D, 0,
DATEDIFF(D, 0, GETDATE())))
答案 2 :(得分:1)
感谢大家展示如何做到这一点。我认为这将是如何编写SQL,除非有更有效的方法?
SELECT *
FROM events
WHERE date IN (
SELECT DATEADD(D,daysBefore,DATEADD(D, 0, DATEDIFF(D, 0, GETDATE())))
FROM interval
WHERE events.customerID = customerID);
<强> SQLFiddle 强>