二つの時刻の大小比較について

このQ&Aのポイント
  • A・B二つの日付を比較する方法について質問があります。
  • AとBは異なる日付形式であるため、条件の設定に問題が生じています。
  • アドバイスをいただきたいです。
回答を見る
  • ベストアンサー

二つの時刻の大小比較について

いつもお世話になっています。 今A・B二つの日付でどちらが大きいか比較し、if文で分岐させようと思っています。 しかしABそれぞれが日付形式が違うためそこで躓いており質問をさせて頂きました。 A:MySQL内のデータでフィールドタイプは「datetime」 (表示形式:2008-03-17 00:00:00) B:現在時刻+1日をdate関数で下記のように作成しました   $B=date("Y-m-d H:i:s",time()+($days*24*60*60)); これでBの日がAの日より後ろのとき・・・という条件で該当するデータのみSQLから引っ張り出してきたいのですが、 「・・・WHERE A <'$enddate'・・・」という条件設定ではアウトでした・・・。 何かアドバイスなど頂けたら嬉しい限りです。 よろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

>A:2008-03-17 00:00:00 >B:2008-03-25 07:00:00 両方書式化されているなら何かしらの方法で1つの数値化したら良いのでは? http://www.php.net/manual/ja/function.date-parse.php 多分 数値・数式っぽい羅列だから単純に比較演算子を使うと数値として、変に演算しちゃって比較されちゃっておかしな事になってるんじゃないかな Aは↑ので変換してどうにかするとしてBは"Y-m-d H:i:s"じゃなく"YmdHis"のような変換をするとかね。

その他の回答 (1)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

$Bの変換が誤っているのでは? それは大丈夫なの? 一旦$Bそのものを出力してみた? 或いは見えているAと実際の値が実は違うとか。(dumpで見てみるとか) そういう事ではなく?

news_0203
質問者

お礼

ご回答ありがとうございました! 一箇所誤りがあったので訂正します。 (誤)・・・WHERE A <'$enddate'・・・ (正)・・・WHERE A <'$B'・・・ 一度ABともに出力してみたところ、 A:2008-03-17 00:00:00 B:2008-03-25 07:00:00 B-A>0 というif文が書ければ最適なのですが・・・。 と、特に出力上には問題はありませんでした。 しかし「

関連するQ&A

  • 日付/時刻型のフィールドに対してWhere条件を付ける方法

    VBAで開発しています。 Where句で、日付/時刻型のA_dateに対して WHERE A_date > 2008/05/01 といったような条件を付けたいのですが、 どうしてもうまくいきません。 WHERE A_date > Format(2008/05/01, "YYYY/MM/DD") のようにフォーマットしてみてもだめでした。 WHERE A_date > date() のような記述はちゃんと通るんですが、固有の日付とのSQLがうまくいきません。 日付/時刻型の条件付けは何か特別な記述が必要なのでしょうか? どなたかご回答よろしくお願い致します。

  • mysqlのsql文について教えて下さい

    mysqlのsql文について教えて下さい 下記のようなテーブルとデータがあった場合に どうやれば 2,次郎だけを抽出できますか? 本日日付(2010-08-06)が 既にテーブルBにdateが存在する場合は 3,1,2010-08-04 3,1,2010-08-06を 対象外にしたいです。 Aテーブル id,user 1,太郎 2,次郎 3,3郎 Bテーブル targetid,homonid,date(datetime型) 3,1,2010-08-04 3,1,2010-08-06 3,2,2010-08-05 下記だと2010-08-04にヒットしてしまい(当たり前?)動作しません。 select distinct a.* from tblA a, tblB b where date_format(b.date, "%Y-%m-%d") <> "2010-08-06" ;

  • 日付検索で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
  • mysqlで日付が比較できない・・・

    はじめまして 皆様の知恵を貸してください mysqlでの質問なのですが、 簡潔にいうと日付が比較できません。 どういうことをしたいのかというとsqlからwhere文で今の日付より大きいもデータを抽出するということです データベースの構造は id int型 endtime datetime型 で構成されています endtimeには既にいくつかのdatetime型の値が入っています 例えば 2012-12-14 09:18:00 のように入っています でGETDATE()関数を使って今現在の時刻より未来のものだけ抽出するために convert関数を使って一度varchar型に変換することで比較しようとしました 色々インターネットで調べた結果次のような文なのではないかと考えました select id,endtime from [データベース名] where CONVERT(VARCHAR,endtime,121)>=CONVERT(VARCHAR,getdate(),121); しかし実行ができません 比較する方法を教えて欲しいです

    • ベストアンサー
    • MySQL
  • 日付時刻型の比較

    お世話になります。コンピュータ歴が短いもので質問の意味がよくわからないかもしれませんがよろしくおねがいします。 accessのDB「テーブル1」に日付時刻型のフィールド「フィールド1」があり、 2001/00/00 00:00:00の形式でデータが入っています。 テーブル1のデータで、1ヶ月前のデータより新しいもののみをVBScriptで抜き出したいのですが、下記のようにDATEADD関数で変数1に1ヶ月前の日付を代入し、それと比較しようとしましたが、うまくいきませんでした。 変数1 = DATEADD("m" ,-1 ,NOW) Set rs = Server.CreateObject("ADODB.RecordSet") sql = "SELECT * FROM テーブル1 WHERE フィールド1 >= 変数1" 変数1をResponse.Writeすると見た目は同じ形式で入っていました。 変数1の部分を手書きで#2001/00/00 00:00:00#と書けばうまく動いてくれるの ですが・・・ 変数の値を型変換しなければいけないのでしょうか? 良い方法がありましたら教えてください。

  • oracle 最新日付との比較

    いま、同一商品番号の最新日付を利用した条件が うまく作れず悩みながら色々試していますが、 うまくいきません。 やりたいことは、 1,AテーブルとBテーブルの 商品番号が同じ場合は除外します。 2,残されたデータから次はCテーブルの中にある 同一商品番号で、最新の日付が当月の場合はデータを残す。 つまり、前月以前のデータは除外となります。 1まではできています。 Select * from aテーブル where not exists (select 'X' from bテーブル where a.商品番号 = b.商品番号) この先上記sqlにつなげてmax関数くくった最新日付と システム日付を年月のみで比較する等試みましたが、 求めた結果になりません。 上記sqlでビューを作成してといったことは、 今回やらずに一つのsqlのみでできないかと 試行錯誤です。 よきアドバイスございましたら、 宜しくお願い致します。

  • ExcelVBAでSQLサーバの日付時刻型参照

    Excel/VBA(Excel2003)で開発しています。 SQL Server上のデータをSQLで参照する際、WHERE条件句に日付を範囲指定するのですが、 全く無視され、全日付のデータが読まれてしまいます。   ・SQL Server上のデータテーブル:MEISAI       日付項目名:伝票日付 (データ型 = 日付/時刻, サイズ = 8)   ・範囲指定もとデータ:inpDate1,inpDate2 AS String inpDate1 の内容 = "2011/06/01" (FormのDateTimePickerで指定する。) inpDate2 の内容 = "2011/06/10" (同上) の時、SQL文は下記の通りです。 SELECT * FROM MEISAI WHERE 伝票日付 >= '" & inpDate1 & _ "' AND 伝票日付 <= '" & inpDate2 & "' ; " また、inpDate1,inpDate2をいったん Date型に変換し、 Dim Dt1 AS Date DimDt2 AS Date Dt1 = CDate(inpDate1) Dt2 = Cdate(inpDate2) SELECT * FROM MEISAI WHERE 伝票日付 >= " & Dt1 & " AND 伝票日付 <= " & Dt2 & " ; " としても、結果は同じでした。 いろいろ試してみたのですが、どうしてもうまく行かず困っています。 どなたかおわかりの方おられましたら、教えて下さい。

  • MySQLでデータが存在する日付を取得する方法

    MySQLで、DATETIME型のカラムから、指定した日数分の、データが存在する日付を取得することは可能でしょうか? 例えば、下記 table_a から最近3日分のデータが存在する日を取得したい場合、 2011-06-18 2011-06-16 2011-06-12 が最近3日のデータが存在する日なので、結果に示すようなものが取得したい内容となります。 (下記結果では、各日付けの最後の時刻が取得されていますが、時刻はどれでも構いません) もしそのようなことができるSQL構文がありましたら、ご教示ください。 よろしくお願いします。 (table_a) +---------------------+ | date | +---------------------+ | 2011-06-09 09:00:00 | +---------------------+ | 2011-06-09 15:00:00 | +---------------------+ | 2011-06-10 09:00:00 | +---------------------+ | 2011-06-11 09:00:00 | +---------------------+ | 2011-06-12 07:00:00 | +---------------------+ | 2011-06-12 09:00:00 | +---------------------+ | 2011-06-16 09:00:00 | +---------------------+ | 2011-06-18 09:00:00 | +---------------------+ | 2011-06-18 12:00:00 | +---------------------+ | 2011-06-18 20:00:00 | +---------------------+ (結果) +---------------------+ | date | +---------------------+ | 2011-06-18 20:00:00 | +---------------------+ | 2011-06-16 09:00:00 | +---------------------+ | 2011-06-12 09:00:00 | +---------------------+

    • ベストアンサー
    • MySQL
  • MySQL「 INT」「 DATETIME」違い

    MySQLの「 INT」型と「 DATETIME」型の違いを教えてください。 ・「 DATETIME」型とは、単に日付形式を担保してくれる型に過ぎないのでしょうか? ・日付形式(フォーマット)以外を挿入すると、「0000」になってしまうということでしょうか? ■「 DATETIME」メリット ・データ内容が見た目で分かる以外、何があるのでしょうか? ■「 INT」メリット ・早い?

    • ベストアンサー
    • MySQL
  • datetime型で日付計算ができません。

    開始日時(start_date)の20日を経過したレコードを削除したいのですがSQLで行う方法がわかりません。 start_dateはMySQLのdatetime型です。 select * from test where start_date + 20days < now() な感じ消せると思ったのですが調べても方法が 見つかりませんでした。

    • ベストアンサー
    • MySQL