【问题标题】:checking if a date falls in given date range using mysql query使用 mysql 查询检查日期是否在给定的日期范围内
【发布时间】:2013-08-15 09:10:55
【问题描述】:

我的数据库表“mycodes”中有这两列

code_valid_from_date
code_expiry_date

我需要检查给定日期是否在 mycodes 表中给定日期的有效期内。

例如,

mycodes
id, code_valid_from_date, code_expiry_date, name
1, 2013-08-01, 2013-08-28, 'Code 1'
2, 2013-08-29, 2013-09-20, 'Code 2'
3, 2013-07-01, 2013-07-28, 'Code 3'

我试过这个查询,

SELECT
DATEDIFF(NOW(), code_valid_from_date) valid_from_days, 
DATEDIFF(code_expiry_date, NOW()) expiry_days_left
FROM mycodes

然后在我的 php 代码中,我检查这两个 DATEDIFF 都是正数,然后它是有效代码。如果我必须在 mysql 查询本身中计算此有效性而不是使用 PHP 进行检查,该怎么办?我该怎么做?

PS:我也可以在 WHERE 子句中使用 BETWEEN,但这将返回该给定范围内的行,但我需要列出所有状态为过期或未过期的记录。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    Mysql 知道比较日期,所以你可以使用类似的东西:

    SELECT (NOW() >= code_valid_from_date AND NOW() <= code_expiry_date) AS valid FROM mycodes
    

    【讨论】:

    • 嗯——让我试试
    【解决方案2】:

    SELECT (NOW() BETWEEN code_valid_from_date AND code_expiry_date) 作为有效的来自 mycodes

    【讨论】:

      【解决方案3】:

      这是我查找日期范围是否在另一个日期范围内的代码。 我相信您可以修改我选择的与您的到达和离开日期相同的日期。

      适用于我和我的查询的示例:

      SET @PerBeg = ’2010-01-01’;
        SET @PerEnd = ’2010-01-31’;
      
        SELECT  
            Reservation.ArrivalDate AS ArrivalDate, 
            Reservation.DepartureDate AS DepartureDate, 
        . . . 
      
        WHERE
      
        fBoolActyInPeriod(ArrivalDate,DepartureDate,@PerBeg,@PerEnd)
      

      使用这些函数

        FUNCTION fBoolActyInPeriod contains this code
        RETURN IF (fBoolFirstDateEarlier(ActyEnd, PerBeg) OR fBoolFirstDateEarlier(PerEnd, ActyBeg),0, 1)
      
        FUNCTION fBoolFirstDateEarlier contains this code
        RETURN IF (DATEDIFF(first, second) < 0, 1, 0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 2010-11-01
        • 1970-01-01
        相关资源
        最近更新 更多