簡體   English   中英

使用mysql查詢檢查日期是否在給定的日期范圍內

[英]checking if a date falls in given date range using mysql query

我的數據庫表“ 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,但是它將返回屬於該給定范圍的行,但是我需要列出狀態為過期或未過期的所有記錄。

Mysql知道可以比較日期,因此您可以使用類似以下的內容:

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

選擇(NOW()在code_valid_from_date和code_expiry_date之間)作為有效自mycodes

這是我的代碼,用於查找某個日期范圍是否在另一個日期范圍內。 我確定您可以將我選擇的日期修改為到達和離開的日期。

適用於我和我的查詢的示例:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM