我的数据库表'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,但是会返回属于该给定范围的行,但是我需要列出状态为expired或not expired的所有记录。
答案 0 :(得分:4)
Mysql知道要比较日期,所以你可以使用类似的东西:
SELECT (NOW() >= code_valid_from_date AND NOW() <= code_expiry_date) AS valid FROM mycodes
答案 1 :(得分:0)
SELECT(NOW()BETWEEN code_valid_from_date AND code_expiry_date)AS from mycodes
答案 2 :(得分: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)