1

データベースでnullになる可能性のあるDATETIME値「some_date」があります。次のクエリを試してみると、日付がnullの行には何も返されません。

SELECT * 
FROM tabel
WHERE DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()

some_dateがnullの場合でもDATE_ADD()がDATEを生成するように、このクエリを編集できますか?

4

2 に答える 2

8

COALESCEを使用して、NULLの日付を別の日付に変換できます。次に例を示します。

select *
from table
where date_add(coalesce(some_date, now()), interval some_seconds second) < now()

COALESCEは、最初のNULL以外の引数を返します。

COALESCE(value, ...)
リスト内の最初の非NULL値を返します。非NULL値がない場合は、NULLを返します。

したがって、NULLの代わりに使用する日付を決定する必要がありますsome_date


NULLの置換some_dateが過去に十分に進んでいて、テストが常に合格する場合は、次を使用できます。

where some_date is null
   or date_add(some_date, interval some_seconds second) < now()

常に失敗する場合は、次のようにします。

where some_date is not null
  and date_add(some_date, interval some_seconds second) < now()
于 2011-11-06T18:27:34.090 に答える
3

次のクエリを使用する方がおそらく少し明確です。

SELECT * 
FROM tabel
WHERE some_date IS NULL OR DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()
于 2011-11-06T18:30:27.303 に答える