2 つの日付の間でクエリを実行する必要があります。これは簡単ですが、たとえば date_end が次の場合0000-00-00
(つまり、終了がないことを意味します) を選択するにはどうすればよいですか?
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start
/* and if data_end > 0000-00-00 */ AND data_end
ありがとう。
0000-00-00
終了日を表すために使用するのではなく、このフィールドをnull許容にし、値をに設定する必要がありますNULL
。end_date
これは、を初期値に設定するよりもはるかに論理的に意味があります。
news
レコードがで終了しないという理由だけで0000-00-00
、これを「終了なし」の値として使用することは正しくありません。たとえば、将来、ニュースの平均的な日付範囲を計算する必要がある場合、を使用0000-00-00
すると結果が歪められます。
次のようにして、現在のすべてのレコードを更新できます。
UPDATE news
SET end_date=NULL
WHERE end_date='0000-00-00'
次に、次のようなクエリを実行できます。
SELECT COUNT(*)
FROM news
WHERE NOW()>=date_start
AND (NOW()<date_end OR date_end IS NULL)
なぜあなたはただすることができます:
SELECT COUNT(*) FROM news
WHERE data_start <= NOW() AND (data_end >=NOW() OR data_end ='0000-00-00')
あなたは近かった:
SELECT COUNT(*) FROM news
WHERE
data_start<=NOW()
AND (data_end='0000-00-00' OR data_end>=NOW())
これは機能するはずですが、サーバーの日付形式を確認することをお勧めします。
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start AND IsNull(data_end, cast('1/1/9999' as datetime))