1

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

ありがとう。

4

4 に答える 4

2

0000-00-00終了日を表すために使用するのではなく、このフィールドをnull許容にし、値をに設定する必要がありますNULLend_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)

これを変更する機能がない場合、@Arionの答えは良い「ハック修正」です

于 2012-05-01T12:04:44.877 に答える
2

なぜあなたはただすることができます:

SELECT COUNT(*) FROM news 
WHERE data_start <= NOW() AND (data_end >=NOW() OR data_end ='0000-00-00')
于 2012-05-01T11:59:41.027 に答える
1

あなたは近かった:

SELECT COUNT(*) FROM news 
WHERE 
  data_start<=NOW()
  AND (data_end='0000-00-00' OR data_end>=NOW())
于 2012-05-01T12:02:27.100 に答える
0

これは機能するはずですが、サーバーの日付形式を確認することをお勧めします。

SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start AND IsNull(data_end, cast('1/1/9999' as datetime))
于 2012-05-01T12:04:12.220 に答える