2

データベーステーブル「mycodes」にこれらの2つの列があります

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の両方が正の数であり、有効なコードであることを確認します。PHP を使用してチェックするのではなく、mysql クエリ自体でこの有効性を計算する必要がある場合はどうすればよいですか? それ、どうやったら出来るの?

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

これは、日付範囲が別の日付範囲内にあるかどうかを確認するための私のコードです。あなたの到着日と出発日と同じ日付を選択することで、私の選択を変更できると思います。

私と私のクエリでうまくいく例:

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 に答える
0

SELECT (NOW() BETWEEN code_valid_from_date AND code_expiry_date) AS valid FROM mycodes

于 2014-03-12T11:12:22.167 に答える