【问题标题】:SQL Date less than few days from todaySQL 日期距今天不到几天
【发布时间】:2018-07-19 07:41:02
【问题描述】:

我有一个表格,其中有给用户的电子邮件,我想请求接收从今天起约会不到两天的用户。怎么能做到这一点? 这是我的 SQL 表:

CREATE TABLE vacation_users(EMAIL VARCHAR(255), STARTDATE DATE, ENDDATE DATE);

【问题讨论】:

    标签: sql date hsqldb days


    【解决方案1】:

    答案是这样的。我使用 HSQLDB,这就是答案。

    SELECT * FROM vacation_user WHERE (ENDDATE < (SYSDATE + 2 DAY));
    

    【讨论】:

      【解决方案2】:

      试试这个(未测试):

      SELECT EMAIL from vacation_users 
          WHERE ENDDATE < DATEADD(day, +2, CURRENT_DATE) AND ENDDATE > CURRENT_DATE
      

      选择结束日期大于当前日期但小于当前日期+2的邮件。

      编辑:我更新了答案,因为 OP 通知了我使用的数据库。如果 CURRENT_DATE 也不起作用,您可以从built-in functions 尝试另一个。

      【讨论】:

      • 你使用哪个数据库?
      • HSQLDB 数据库
      • 很高兴听到这个消息。
      • 您的回答很好,因为它忽略了旧日期。您需要将剩余的 GETDATE() 更改为 CURRENT_DATE。
      【解决方案3】:

      选择 * 来自假期用户 其中 STARTDATE = dateadd(day,datediff(day,2,STARTDATE),0)

      【讨论】:

        【解决方案4】:

        这取决于您使用的数据库,但原理大致相同。

        在 Oracle 中,你会做类似的事情

        select email
        from vacation_users
        where startdate < sysdate - 2;
        

        它会将您返回到 2 天前的确切时间(如果是今天的 09:53,那么它将是 2 天前的 09:53)。根据您真正需要的内容,您可能需要 TRUNCate 这些值(这样您就可以得到没有时间组件的日期)或应用其他一些函数或原则,涉及可能的索引影响等。

        虽然,“从今天起不到两天”是……究竟是什么?是STARTDATE 还是ENDDATE(或这两者的某种组合)?

        【讨论】:

          【解决方案5】:
          SELECT * 
          FROM vacation_users 
          WHERE (DATEADD(day,2,ENDDATE)) < (CONVERT(date, SYSDATETIME()))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-20
            • 2014-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多