2

我的数据库表“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 ,但这将返回该给定范围内的行,但我需要列出所有状态为过期或未过期的记录。

4

3 回答 3

4

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

SELECT (NOW() >= code_valid_from_date AND NOW() <= code_expiry_date) AS valid FROM mycodes
于 2013-08-15T09:14:49.720 回答
0

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

于 2014-03-12T11:12:22.167 回答
0

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

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

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)
于 2016-05-11T20:31:36.587 回答