• ベストアンサー

検索条件の日付の型

お力を貸してください。 データベースから現在年月日のものだけ抽出したいのですが、 日付の型が合わないからなのか、抽出できません。 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
  • 回答数2
  • ありがとう数2

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

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

う~ん・・・一般的には・・・ 表示開始日時が2007-09-01 00:00:00で 表示終了日時が2007-09-10 23:59:59なら 普通2007-09-04は表示されるのが妥当だとおもいますけど? もし万が一当日しか有効でなければ、最初から 表示開始日時が2007-09-01 00:00:00の場合の 表示終了日時は2007-09-01 23:59:59となっているはずでは? まぁそれはそうと・・・前回の回答でも書きましたが とりあえずdt_fromやdt_toがちゃんとdatetime型であれば 変数をクォーテーションでくくっても解決しませんか? ×WHERE dt_from = $from AND dt_to = $to ○WHERE dt_from = '$from' AND dt_to = '$to'

aya_bambi
質問者

お礼

’’これでいけました。 ``と勘違いしてました。申し訳ないです。 私自身が "" と '' と `` の意味をちゃんと 把握してないからこういうことになるのですね。。。 どうもありがとうございました。感謝しています。

aya_bambi
質問者

補足

一般的にはそうなのかもしれませんが、期間が一日のものだけ 抽出してくれというクライアントの要望なので仕方ないです。 yambejpさんから指摘頂いた '' でくくってみたのですが、 はやり結果は同じでした。 もう少しやってみます。 ちなみに$from = date('Y-m-d 00:00:00')とした場合 型はdatetimeになってるってことでよろしいんでしょうか。 yambejpさんには以前もお世話になってます。 毎度すみません、ありがとうございます。

その他の回答 (1)

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

$fromや$toをクォーテーションでくくる必要があるような・・・ 現在の日時がdt_fromとdt_toの間にあればよいならこんな感じ? $sql = "SELECT * FROM data WHERE CONCAT(CURDATE(),' ',CURTIMT()) BETWEEN `dt_from` AND `dt_to` ";

aya_bambi
質問者

補足

わかりづらい質問文ですみませんでした。 BETWEE ・・・ AND ・・・ を使うと 例えば 表示開始日時が2007-09-01 00:00:00 表示開始日時が2007-09-10 23:59:59 などのいらないデータも抽出してしまいます。 欲しいデータは 表示開始日時が2007-09-04 00:00:00 表示開始日時が2007-09-04 23:59:59 という期間が一日のデータです。

関連するQ&A

  • DB登録に関する日付の認識

    はじめまして、こんばんは。分からないことがあり質問させていただきます。 現在、PHPにてMySQLへアクセスログを登録するものを作成しており、同じ日付に複数訪れた人は、最終日時。はじめて訪れた人はその日時を登録したいのですが、登録(または更新)する際、データベースに設定のdateカラム(datetime)を参照したとき、同じ日付をどう判別するのか?が分かりません。 以上のことから、これまで年月日のみをdateカラムに登録していたのですが、時間も登録したく考え、改め見直しているのですが、時間までをも登録した場合の日付の判別が分からないのです。 お恥ずかしいとは思うものの、現在の登録スクリプトは、 $y = date("Y"); $m = date("m"); $d = date("d"); $date = $y.$m.$d; $sql = "insert................ それを、 $date = date("Y-m-d H:i:s"); で登録したいと考えております。 お忙しい中恐縮ですが、ご指導いただければ幸いです。

    • ベストアンサー
    • PHP
  • 月間集計ですべての日付を抽出するには

    Oracle9iで開発をしております。 月間集計をするにあたり、SQLをどのように書けばよいのか質問させていただきたいと思います。 たとえば、COUNTテーブルというテーブルがあり 年月日 カウント数 2005/09/01 1000 2005/09/01 1000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 というようにデータが入っていたとします。 現在、 SELECT 年月日, SUM(カウント数) FROM COUNTテーブル WHERE COUNT_DATE BETWEEN TO_DATE(to_char(?||'/'||?||'/01')) AND LAST_DAY(TO_DATE(to_char(?||'/'||?||'/01'))) GROUP BY 年月日 としていまして、抽出されるデータは 2005/09/01 2000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 となります。 ここで、2004/09/04や2005/09/07以降2005/09/30までのテーブルには存在 しない日付も抽出したいと思っています。 どのようにすれば抽出できるのでしょうか?

  • 日時の期間での抽出

    スケジュール帳のWebアプリを作成していて PostgreSQLを使用しています。 sc_tblというテーブルのday_timeというカラムに日時 to_doというカラムに予定を入れているのですが 日時2006/12/01 01:00のデータを期間の抽出条件で抽出する時 2006/11/30 20:00~2006/11/30 26:00という条件で抽出できるような SQL文はあるのでしょうか。(1:00を25:00として抽出したい) 下記2つのSQLでは無理でした。 ・その1 select day_time, to_do from sc_tbl where day_time >= cast('2006-11-30 20:00:00' as timestamp) and day_time <= cast('2006-11-30 26:00:00' as timestamp); ・その2 select day_time, to_do from sc_tbl where day_time >= to_date('2006-11-30 20:00:00','YYYY-MM-DD H24:MI:SS') and day_time <= to_date('2006-11-30 26:00:00','YYYY-MM-DD H24:MI:SS');

  • MYSQLで全てのカラムから検索する。

    tbというテーブルのbangというカラムに4が含まれていれば表示というのは select * from tb where (bang) like '%4%' ; という形になりますが、このtbテーブルにさらにname,tukiというカラムがあったとして カラムに関係なくレコードのどこかに4が入っていれば抽出するというSQL文が書きたいです。 select * from tb where bang like '%4%' or name like '%4%' or tuki like '%4%' ; と書くことで何とか今まではやってきたのですが、カラム数が増えてきてしまったので、ものすごく長いSQL文なってしまいました。 もう少しスマートにする方法はありませんか?

    • ベストアンサー
    • MySQL
  • 日付検索で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
  • VB5.0+SQL-Server7で日付を条件とした検索がうまくいかない。

    【やりたい事】  XXXTBLのDATE1が今日より前のレコードを読みたい。  SQL-ServerのDATE1属性は「datetime」です。 【やってみた事1】 Dim wk_Today As Date wk_Today = Date SQLText = " select *" & _      " From XXXTBL" & _      " Where DATE1 < " & "#" & wk_Today & "#" 【結果1】 実行時エラー 3146 ODBC呼び出しが失敗しました。 【やってみた事2】 Dim wk_Today As Date wk_Today = Date SQLText = " select *" & _      " From XXXTBL" & _      " Where DATE1 < " & wk_Today 【結果2】  該当データなし。  (条件に合致するレコードを作っておいたのに) 【やってみた事3】 SQLText = " select *" & _      " From XXXTBL" & _      " Where DateDiff('d',DATE1," & "#" & Date & "#" & ") > 0 " 【結果3】  読めました。 【質問】  なぜ、1と2は駄目だったのでしょうか?  1か2の方法でできた方が素直な感じがするのですが。  VBにもSQL-Serverにも精通しておらず、つたない 質問で申し訳ありませんが、不足する情報は補足しま すので、ご教授お願いいたします。

  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在SQLサーバー2000を使用してこの処理を行おうと思っております。 一度テーブルに格納したデータをSELECT文を使って抽出したい と思っているのですが、WHERE条件に日付型のフィールドを指定するとうまく行きません。(時刻が日付型のフィールドに入っている場合、うまくいきません。) やっていることは YMD(DATE型・主キー)、ID(VERCHAR型・主キー)、NAME(VERCHAR型) というのテーブル(テーブル名:MEIBO)に入っている 2002/02/02 14:10:55、0001、山田 太郎 というデータを 取込年月日、個人IDを指定して特定の列を取り出そうとしています。 SQL文は SELECT * FROM MEIBO WHERE YMD = '2002/02/02 14:10:55' AND ID = "0001' と記述していますが、一件もヒットしません。 DATE型のフィールドにはINSERTするときにGETDATE()をつかってシステム日付を 格納するようにしています。 GETDATE()ではなく、DATE()を使ってシステム日付を格納した 2002/02/02、0001、山田 太郎 という時刻の入っていないデータに対しては SELECT * FROM MEIBO WHERE YMD = '2002/02/02' AND ID = "0001' というSQL文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。

  • version7,version8 の型の扱い

    PostgreSQL の 7 から8 へマイグレーション作業をしている者です。 int型で not null制約のあるカラム「id」 の値から、''(空)であることを判定する時、 version7 では、 $sql = "select * from tbl_name where id <> ''"; のSQL文で動いていたようですが、 version8 では、 型の扱いが厳しくなった訳か、syntax error となります。 この場合version8 では、 $sql = "select * from tbl_name where id <> 0"; が、 ''(空)であることを判定するSQL文と考えてよいでしょうか? ご教授よろしくお願いします。

  • ACCESS2000でクエリを抽出条件で抽出

    VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。 抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。 strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'" クエリーのカラム名は全角漢字です。 どこがおかしいのでしょうか? よろしくお願いいたします。

  • オラクルの条件で時間を指定する方法

    オラクルの条件で時間を指定する方法と格闘中です。 ログのようなデータがたくさんあってそこから、 18時~翌2時のデータはいくつあるか。 というSQL文を書きたいのですが、 うまくいきません。以下のようなSQLなのですが、 どなたかアドバイスいただけないでしょうか? SELECT COUNT(*) as CNT, ID FROM テーブル名 WHERE TO_DATE(DATE型カラム, 'HH24:MI') >= '18:00' AND TO_DATE(DATE型カラム, 'HH24:MI') < '02:00' GROUP BY ID ORDER BY CNT; ちなみにこんなエラーが出ています。 SQLエラー: ORA-01843: 指定した月が無効です。 よろしくお願いいたします。