1

このクエリを試すと:

SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS 'upgrade_date'
WHERE id=12345

正しい値のレコードが返されますが、次のような条件を追加すると、次のようになります。

SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS 'upgrade_date'
WHERE id=12345
AND 'upgrade_date' < NOW()

空の結果セットを返します。ただし、の値はupgrade_date現在の日付よりも低くなっています。

どうしたの?

4

2 に答える 2

3

節で the を使用することはできません。aliaswhere元の列名にする必要があります。

SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS upgrade_date
WHERE id=12345 AND 
      upg_date < NOW()

MySQLマニュアルから:

WHERE 句の実行時に列の値がまだ決定されていない可能性があるため、WHERE 句で列のエイリアスを参照することはできません。

于 2012-09-19T14:18:19.280 に答える
0

WHERE 句とエイリアスで引用符を使用しないでください

SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS upgrade_date
                                              ^^^^^^^^^^^^
WHERE id=12345
AND upgrade_date < NOW()
    ^^^^^^^^^^^^

引用符は、以前に作成したフィールド エイリアスではなく、upgrade_date を文字列値に変換します。

于 2012-09-19T14:12:25.953 に答える