我有一个表,其中有发给用户的电子邮件,我想请求接收日期不到两天的用户。这是怎么做的?这是我的SQL表:
CREATE TABLE vacation_users(EMAIL VARCHAR(255), STARTDATE DATE, ENDDATE DATE);
答案是这样的。我使用HSQLDB,这就是答案。
SELECT * FROM vacation_user WHERE (ENDDATE < (SYSDATE + 2 DAY));
试试这个(未测试(:
SELECT EMAIL from vacation_users
WHERE ENDDATE < DATEADD(day, +2, CURRENT_DATE) AND ENDDATE > CURRENT_DATE
它选择具有结束日期的邮件,该日期等于大于当前日期,但小于当前日期+2。
编辑:我更新了答案,因为OP通知了我使用的DB。如果CURRENT_DATE也不起作用,您可以从内置函数中尝试另一个。
选择*来自度假用户其中STARTDATE=dateadd(day,datediff(day,2,STARTDATE(,0(
这取决于您使用的数据库,但原理基本相同。
在Oracle中,您可以执行类似的操作
select email
from vacation_users
where startdate < sysdate - 2;
它会将您返回到2天前的确切时间(如果是今天的09:53,则为2天前的09:53(。根据您真正需要的内容,您可能需要TRUNC
验证这些值(这样您就可以获得没有时间成分的日期(,或者应用一些其他函数或原则,关于可能的索引影响等。
不过,"从今天起不到两天的约会"是。。。究竟是什么?它是STARTDATE
还是ENDDATE
(或两者的某种组合(?
SELECT *
FROM vacation_users
WHERE (DATEADD(day,2,ENDDATE)) < (CONVERT(date, SYSDATETIME()))