【发布时间】:2018-07-19 07:41:02
【问题描述】:
我有一个表格,其中有给用户的电子邮件,我想请求接收从今天起约会不到两天的用户。怎么能做到这一点? 这是我的 SQL 表:
CREATE TABLE vacation_users(EMAIL VARCHAR(255), STARTDATE DATE, ENDDATE DATE);
【问题讨论】:
我有一个表格,其中有给用户的电子邮件,我想请求接收从今天起约会不到两天的用户。怎么能做到这一点? 这是我的 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 通知了我使用的数据库。如果 CURRENT_DATE 也不起作用,您可以从built-in functions 尝试另一个。
【讨论】:
选择 * 来自假期用户 其中 STARTDATE = dateadd(day,datediff(day,2,STARTDATE),0)
【讨论】:
这取决于您使用的数据库,但原理大致相同。
在 Oracle 中,你会做类似的事情
select email
from vacation_users
where startdate < sysdate - 2;
它会将您返回到 2 天前的确切时间(如果是今天的 09:53,那么它将是 2 天前的 09:53)。根据您真正需要的内容,您可能需要 TRUNCate 这些值(这样您就可以得到没有时间组件的日期)或应用其他一些函数或原则,涉及可能的索引影响等。
虽然,“从今天起不到两天”是……究竟是什么?是STARTDATE 还是ENDDATE(或这两者的某种组合)?
【讨论】:
SELECT *
FROM vacation_users
WHERE (DATEADD(day,2,ENDDATE)) < (CONVERT(date, SYSDATETIME()))
【讨论】: