MySQL日付検索で0000-00-00 00:00:00を除外する方法

このQ&Aのポイント
  • MySQLの日付検索で、0000-00-00 00:00:00という値を除外する方法について教えてください。
  • 試したSQL文では、検索結果が0件になってしまいます。
  • どのような条件を設定すれば、0000-00-00 00:00:00を除外した検索結果を得ることができるのでしょうか。
回答を見る
  • ベストアンサー

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

日付検索で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になってしまいました。 もうわからなくなってしまったので、アドバイスお願いします。

  • MySQL
  • 回答数3
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 そもそも「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 とか・・・。

yorkies
質問者

お礼

教えていただいた、1番でのぞんでいた結果になりました。ありがとうございます。 sqlに > を使えば簡単に解決できて、それに気がつかなかった自分はまだ勉強不足だなと感じました。 >そもそも「hizuke」の型は??? >SQL見てると「DATE(hizuke)」ってやってるのに、「<= '20100505'」って・・・。 hizukeはdatetime型で、DATE(hizuke)としたのは、時刻を検索時に考慮したくないからなんですが、 自分でもよくわかっていません。 ありがとうございました。

その他の回答 (2)

  • moousi
  • ベストアンサー率70% (21/30)
回答No.2

SELECT * FROM user_tbl WHERE (DATE( hizuke ) <= '20100505') and DAYOFMONTH(hizuke); DAYOFMONTHは、日付に扱いにならないデータをまとめて弾いてくれるので便利です。

yorkies
質問者

お礼

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

開始日をダミーでいれればよいのでは? SELECT * FROM user_tbl WHERE hizuke BETWEEN '1900-01-01 00:00:00' AND '2010-05-05 23:59:59' 1900年より前の処理なんてさすがにありませんよね?

yorkies
質問者

お礼

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

関連するQ&A

  • SQLServerでの日付関連に関する事

    こんにちは、質問させてください。 今、以下の構成のテーブル(test_tbl)があるとします。 --------------------------- filed = type = size --------------------------- name = varchar = 512 hizuke = datetime = 8 address = varchar = 512 --------------------------- 今、ある期間に当てはまる人のデータを抽出するため 以下のSQL文を発行しています。 ------------------------------------ select, name, address, substring(convert(varchar, hizuke, 112), 1, 4) + '/' + substring(convert(varchar, hizuke, 112), 5, 2) + '/' + substring(convert(varchar, hizuke, 112), 7, 2) from test_tbl where substring(convert(varchar, hizuke, 112), 1, 4) + '/' + substring(convert(varchar, hizuke, 112), 5, 2) + '/' + substring(convert(varchar, hizuke, 112), 7, 2) between '1999/11/02' and '2003/02/16' ----------------------------------------------------- と記述しています。 このSQLだと関数などたくさん使用しており 時間がかかってしょうがありません。 ※特に日付関連の部分 なにかいいアドバイスがある方、宜しくお願い致します。

  • Access SQL日付時間型検索

    Accessで以下SQLを書いたのですが SQLC = "SELECT * FROM tbl_data where date_end = #"&tmp_date_end&"#" ”引数が間違った型、許容範囲外、または競合しています。 ” とですます。 何か書き方の誤りがあるのでしょうか? テーブル名 tbl_data のフィールド名date_end から変数tmp_date_endと同一データ検索文です。 DBの型は日付時間型です。 変数はyyyy/mm/ddです。

  • 行のカウントを2種類を1つの文で発行したい

    こんにちは質問させてください。 商品が登録されているテーブル A に以下のカラムがあるとします。 id(int),  name(varcahr),  dt(datetime) id   には 店を識別す固有の番号がふってあり、 name には 商品名、  dt   には商品を登録した日付が入っているものとします。 やりたいことは ”id が 「1」 である全商品数” と ”今月登録された商品の数” を出力したいのです。 id が 1 である商品の数は以下のSQLで取り出せます。 SELECT COUNT(*) FROM  ( SELECT * FROM A WHERE A.id='1' ) AS tbl1 id が 1 で 今月登録された商品の数は以下のSQLで取り出せます。 SELECT COUNT(*) FROM  ( SELECT * FROM A     WHERE A.dt BETWEEN DATE(       DATE_SUB( NOW(), INTERVAL DAYOFMONTH( NOW() )-1 DAY) ) AND      LAST_DAY( NOW() ) AND A.id='1' ) AS tbl1 これをひとつのSQLにまとめるにはどうしたらいいのでしょうか…。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • ACCESS 日付検索がうまくいきません

    下記の形式でテーブルに日付データ(訳ありでテキスト型)が格納されています。 yyyy/mm/dd hh:mm:ss 日付のみ入力し下記のSQLで検索してもFromTimeの日付のみのデータしか検索できません。 SELECT * FROM T_A WHERE Access_Time BETWEEN #" & FromTime & "# AND #" & ToTime & "#" (例) FromTime  ToTime 2007/01/01 2007/01/05 2007/01/01のデータしか検索できない。 時間が邪魔してできないのでしょうか? (無理矢理「*」を組み込んだのですがダメでした・・) どなたか教えてください。お願いします。

  • DateTime型の検索

    お世話になっております。 質問内容は基本的な事かもしれませんがご容赦ください。 あるテーブルにDateTime型のフィールドがあり、Insertした日時を保存しています。 このフィールドに対して、日付のBETWEENや時間のBETWEENで検索かけるにはどうしたら良いのでしょうか。 例えば、 時間は未指定だけど、1月1日から1月31日までのデータを検索 SELECT * FROM table WHERE insertDT BETWEEN '01-01' AND '01-31' 日付は不明だけど、7:00から12:00までのデータを検索する等です。 SELECT * FROM table WHERE insertDT BETWEEN '07:00' AND '12:00' これら試しましたが、正常な結果が得られず困っています。 不明な部分の代替文字でもあるのでしょうか。 SELECT * FROM table WHERE (insertDT >= '07:00' AND insertDT <= '12:00') これも試しましたがやはりダメでした。 どなたかご教示の程、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • ハッシュ値のパスワードMYSQL検索で一致しない

    PHPでMYSQLにハッシュ値にしたパスワードを登録して、同じハッシュ値で検索を行いましたが、どうしても検索結果で一致しません。 パスワードの文字列をMD5を使ってハッシュ値に変換して次のようにMYSQLに登録しました。 $email = htmlspecialchars($_POST["email"]); $user_name = htmlspecialchars($_POST["user_name"]); $password = md5(htmlspecialchars($_POST["password"])); $sql = 'INSERT INTO user_tbl (email,user_name,password) VALUES ( "' . $email . '","' . $user_name . '","' . $password . '" )'; $sth = $dd->prepare($sql); $sth->execute( array() ); $qid = $dd->lastInsertId(); ※user_tblの定義のこんな感じにしてあります。 CREATE TABLE user_tbl ( email varchar(50) NOT NULL, user_name varchar(20) NOT NULL, password VARCHAR(50) NOT NULL ); 検索する処理でSQL等は次のように処理しましたが、検索結果がゼロ件でした。 $email = htmlspecialchars($_POST["email"]); $beforepass = md5(htmlspecialchars($_POST["beforepass"])); $afterpass = md5(htmlspecialchars($_POST["afterpass"])); $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"'; $q = $dd->prepare( $sql ); $q->execute(); if($q->fetchColumn() == 1){ //ここでパスワードが一致した場合の処理を書く } そこで次の2パターンのようにSQL文を少し変えてみたらそれぞれの検索結果が1件でした。 $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"';                     ↓ $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '"'; $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and password = "' . $beforepass . '"';                     ↓ $sql = 'SELECT count(password) FROM user_tbl WHERE email = "' . $email . '" and user_name = "tanaka"'; (MYSQLのuser_tblのuser_nameには'tanaka'と入っている状態で実行したものです) SQLに渡される各変数には文字列が代入済みであることが確認できています。 MD5でハッシュ化した文字列同士を比較してどうして検索結果が一致しないのでしょうか? ちなみに検索したいパスワードのハッシュ値とDBに格納されているパスワードのハッシュ値を目で比較したら一致していました。 以上です。 ハッシュ値を検索条件に入れる場合に特殊な事をするのでしょうか? ヒントだけでもよいので教えて下さい。 宜しくお願いします。 os: windows 7 eclipse: Version: 4.2.0 Build SDK: Android 4.1(API 16) PHP 5

    • ベストアンサー
    • PHP
  • 日付型のデータを検索条件

    DATE型でINSERTした日付データが検索条件として効きません。 検索フォームに入力した日付に関係なく全てのレコードが出てしまいます。 以下、原因につきご教示いだけると幸いです、 ◆検索フォームは、以下の通りです。 <html><body> <form method="post" action="list.php"> <input type="text" name="date_more">以降 <input type="text" name="date_less">以前 </form> </body></html> ◆PHPは、日付欄に2005-06-01のように値が入力された場合のみ SQLに追加するようにしています。 //試験日 (値が入力されている場合のみSQL文に追加) if (strlen($date_more) > 0) { $sql .= " and (testdate >= $date_more)"; } if (strlen($testdate_less) > 0) { $sql .= " and (testdate <= $date_less)"; } ◆ $sqlをprintすると select * from mytable where (memo like '%%') and (testdate >= 2005-06-01) のように、SQL文はきちんと発行されているように思います。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • postgreSQLで分からないことがあります。

    postgreSQLで分からないことがあります。 よろしくお願いします。 下にあるtblというテーブルがあったとき。 下のSQLを実行するとデータがうまく取れているんですが、 CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列 なのに何故正しく比較できているのでしょうか? 日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか? tblテーブル *sdateとedateはtimestamp型です。 sdate      | edate | ----------------------------------------- 2010-5-1 10:00:00 | 2010-5-2 13:00:00| SELECT * FROM tbl WHERE CURRENT_DATE BETWEEN SUBSTR(sdate, 1, 10) AND SUBSTR(edate, 1, 10)

  • select文について

    現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 検索条件の日付の型

    お力を貸してください。 データベースから現在年月日のものだけ抽出したいのですが、 日付の型が合わないからなのか、抽出できません。 dt_fromカラムには表示開始日時 dt_toカラムには表示終了日時が入ってます。 $from = date('Y-m-d 00:00:00'); $to = date('Y-m-d 23:59:59'); $sql = "SELECT * FROM data WHERE dt_from = $from AND dt_to = $to "; どこかおかしい点があればご指摘ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL