私たちは、正確に2日今日の日付より前の日付値を返す式を書くことができます:
SELECT DATE(NOW()) + INTERVAL -2 YEAR
我々は、クエリのWHERE
句で式を使用することができます。それはDATETIME
として定義されていた場合は、列は次のように格納されている場合、通常のパターンは、範囲チェック
SELECT t.id
FROM mytable t
WHERE t.mydatecol >= DATE(NOW()) + INTERVAL -2 YEAR
AND t.mydatecol < DATE(NOW()) + INTERVAL -2 YEAR + INTERVAL 1 DAY
だろう
SELECT t.id
FROM mytable t
WHERE t.mydatecol = DATE(NOW()) + INTERVAL -2 YEAR
:我々はチェックしたいテーブルのカラムはDATE
データ型として定義されている場合例:非正規形式のVARCHAR DD-MM-YYYY次に、STR_TO_DATEを使用してDATEに変換しようとするか(問合せが索引を有効に使用できないために実行したくない)、または生成された日付値を等価比較のために必要な文字列形式:'17 -03-2015' に私たちに完全一致になるだろう
SELECT t.id
FROM mytable t
WHERE t.ddmmyyyy = DATE_FORMAT(DATE(NOW()) + INTERVAL -2 YEAR,'%d-%m-%Y')
ではなく、'17に-3-2015' 。そして、平等テストまたはINリストを実行する必要があります。列に格納されている値が標準ではないため、範囲チェックを実行できません。
我々は6年前、4年前、2年前、今日...複数の日付を探すために必要がある場合は、...我々は、日付のリストを生成し、結合操作を実行することができます。彼は、特定の日付ではなく、範囲を探している@ShawnMehan
SELECT t.id
FROM (SELECT DATE(NOW()) + INTERVAL 0 YEAR AS dt
UNION ALL SELECT DATE(NOW()) + INTERVAL -2 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -4 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -6 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -8 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -10 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -12 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -14 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -16 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -18 YEAR
UNION ALL SELECT DATE(NOW()) + INTERVAL -20 YEAR
) l
JOIN mytable t
WHERE t.mydatecol >= l.dt + INTERVAL 0 DAY
AND t.mydatecol < l.dt + INTERVAL 1 DAY
(...そのmydatecolはDATETIMEとして定義されていると仮定)。それはT-SQLではなくMySQLです。 – Barmar
クエリを書く上で、 'last_date'カラムの*データ型*(' DATE'、 'DATETIME'、' VARCHAR')はカラムの* name *と同じくらい重要です。 (この例の値 ''17 -03-2015''は、MySQLの' DATE'の標準形式では* not *です。これは列が 'DATE'として宣言されないかもしれないというヒントです)。 – spencer7593