【问题标题】:Request to find out the date in 2 days要求在 2 天内找出日期
【发布时间】:2021-03-23 02:10:08
【问题描述】:

如何编写sql 查询以找出距离当前日期还有 2 天。 在 php 中,这可以通过:

$res['end_date'] - time () < 86400 * 3;

我怎么能在1sql查询之后做同样的事情,好或者更好,只有2天,如果更少以至于它不起作用,好吧,如果它起作用了,没关系。

UPD:

有必要编写一个sql 查询,该查询将仅选择那些在end_date 到期前还有 2 天的记录

字段 end_date 的类型为int,并通过php 中的time () 函数存储。

无法编写WHERE 子句。

【问题讨论】:

  • @KIKOSoftware 太好了。咖啡时间
  • 请分享更多细节
  • @NicoHaase,我需要找出结束前 2 天的日期。如何通过 sql 实现
  • @FixiDens:这些不是更多细节。您在 SQL 中尝试过什么? SQL的哪个方言?字段名称是什么。等等。

标签: php mysql sql datetime date-arithmetic


【解决方案1】:

您可以使用FROM_UNIXTIME 函数将其转换为日期时间,然后您可以使用NOW() 加上2 天来检查日期是否小于2 天。然后,您必须检查日期是否早于当前时间,否则您将获得已经过去的日期。

SELECT
    end_date
FROM 
    table
WHERE 
    FROM_UNIXTIME(end_date) <= NOW() + INTERVAL 2 DAY
AND
    FROM_UNIXTIME(end_date) > NOW()

【讨论】:

    【解决方案2】:

    假设您要存储一个纪元时间戳(自 1970 年 1 月 1 日以来的秒数),我建议:

    select *
    from mytable
    where end_date >= unix_timestamp() and end_date < unix_timestamp() + 2 * 24 * 60 * 60
    

    unix_timestamp() 为您提供当前纪元。您可以使用简单的数学计算将其加上两天。

    这种方法的好处是它会直接过滤存储值,因此这可以利用end_date 上的索引 - 而不是将时间戳转换为日期,这需要在过滤可能发生。所以这样效率更高。

    您可以根据自己的喜好调整不等式。我使用了一个半开区间(包括下限,不包括上限),这是一种广泛使用的方法。

    【讨论】:

      【解决方案3】:

      我最终这样做了:

      $time = time();
      $params = $db->query("SELECT * FROM `params` WHERE (`end_date` - {$time}) < 86400 * 3");
      

      它奏效了。

      【讨论】:

        【解决方案4】:

        我总是这样

        select *
        from mytable
        where FROM_UNIXTIME(end_date) < NOW() + INTERVAL 2 DAY
        

        这将在未来两天提前结束日期的情况下得到结果,即任何将在 2 天内结束(或已经结束,因为我没有添加检查)

        编辑:我看到你不能使用 where 如果不能使用 where 子句

        select FROM_UNIXTIME(end_date) - INTERVAL 2 DAY as end_date 
        from mytable
        

        然后在php中检查结果是之前还是之后。然而,这将显示所有结果

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-26
          • 2018-05-13
          • 1970-01-01
          • 1970-01-01
          • 2019-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多