アプリ版:「スタンプのみでお礼する」機能のリリースについて

日付検索で0000-00-00 00:00:00を除外したい


mysql5.0 データ型はdatetimeで日付検索をしたのですが、
日付が"0000-00-00 00:00:00"で登録されているデータも
検索結果に表示され困っています。
例えば、
SELECT * FROM user_tbl WHERE (DATE( hizuke ) <= '20100505')
→これだと、hizukeが0000-00-00 00:00:00のデータも表示されてしまいます。


日付が0000-00-00 00:00:00で登録されているデータを除外するため
自分もいろいろしてみたのですができません。どなたか教えていただけないでしょうか。

参考までに、自分が試したsql文を書きます。↓

SELECT *
FROM user_tbl WHERE (DATE( hizuke ) <= '20100505')
and (hizuke != '0000-00-00 00:00:00')

SELECT * FROM user_tbl WHERE (DATE( hizuke ) <= '20100505')
and (hizuke <> '0000-00-00 00:00:00')

SELECT * FROM user_tbl WHERE (DATE( hizuke ) <= '20100505')
and (hizuke not in ('0000-00-00 00:00:00'))

→上記載のsqlはすべて検索件数が0になってしまいました。
もうわからなくなってしまったので、アドバイスお願いします。

A 回答 (3件)

開始日をダミーでいれればよいのでは?



SELECT * FROM user_tbl WHERE hizuke BETWEEN '1900-01-01 00:00:00' AND '2010-05-05 23:59:59'

1900年より前の処理なんてさすがにありませんよね?
    • good
    • 0
この回答へのお礼

ありがとうございます。
開始日をダミーで入れたら自分の望んでいた検索結果になりました。
いろいろな工夫があると勉強になりました。

お礼日時:2010/08/20 00:19

SELECT *


FROM user_tbl WHERE (DATE( hizuke ) <= '20100505')
and DAYOFMONTH(hizuke);

DAYOFMONTHは、日付に扱いにならないデータをまとめて弾いてくれるので便利です。
    • good
    • 0
この回答へのお礼

DAYOFMONTH を使い自分の望んだ検索結果になりました。
DAYOFMONTHは日付を抜き出したりすることもできるのですね。
教えていただきありがとうございました。

お礼日時:2010/08/20 00:25

こんにちは。



そもそも「hizuke」の型は???
SQL見てると「DATE(hizuke)」ってやってるのに、「<= '20100505'」って・・・。

1.「hizuke」が「datetime」
SELECT * FROM user_tbl WHERE hizuke <= DATE('20100505')
AND hizuke > 0
とか・・・。

2.「hizuke」が「datetime」じゃない
SELECT * FROM user_tbl WHERE DATE(hizuke) <= DATE('20100505')
AND hizuke > 0
とか、
SELECT * FROM user_tbl WHERE hizuke <= '20100505'
AND hizuke > 0
とか・・・。
    • good
    • 0
この回答へのお礼

教えていただいた、1番でのぞんでいた結果になりました。ありがとうございます。
sqlに > を使えば簡単に解決できて、それに気がつかなかった自分はまだ勉強不足だなと感じました。

>そもそも「hizuke」の型は???
>SQL見てると「DATE(hizuke)」ってやってるのに、「<= '20100505'」って・・・。

hizukeはdatetime型で、DATE(hizuke)としたのは、時刻を検索時に考慮したくないからなんですが、
自分でもよくわかっていません。

ありがとうございました。

お礼日時:2010/08/20 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!