• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysqlでdate型の比較について)

MySQLでdate型の比較方法とは?

このQ&Aのポイント
  • MySQLでdate型のフィールド「UPDATE_DATE」があり、このフィールドの日数が、現在から14日以上前だったら「FLAG」フィールドを0にする方法を教えてください。
  • また、日付の比較にはどのような関数や演算子を使用すれば良いのでしょうか?
  • 初心者なので、具体的なコード例や注意点も教えていただけると助かります。

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

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

>date型の比較 datetime型ですね これは、日付だけの比較でよいのですか? それとも時間まで比較するのでしょうか? 単純に時間の比較までやると WHERE UPDATE_DATE + INTERVAL 14 DAY < NOW() 日付だけみるとなると WHERE DATE(UPDATE_DATE + INTERVAL 14 DAY) < CURDATE() みたいな表現になるでしょう。 なお、等号、不等号、DATE()によるキャストは仕様によってかわってきます

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Mysqlで複数テーブルの参照

    Mysqlで複数テーブルの参照 お世話になります。Mysqlについて質問させてください。 現在、それぞれnameとdateとflagの3フィールドをもつテーブルが、2つあります。 もともと別の用途で準備したものなのですが、 2つのテーブルのflagを参照して、1のものだけdate順に並べることが出来るでしょうか? ■テーブル1 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  田辺 | 2010-10-01 | 2 -----------------------------  田所 | 2010-11-01 | 2 ----------------------------- ■テーブル2 -----------------------------  name |  date  |flag| -----------------------------  加藤 | 2010-10-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  織田 | 2010-12-01 | 2 -----------------------------  斎藤 | 2010-01-01 | 2 ----------------------------- ■求める結果 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  加藤 | 2010-10-01 | 1 ----------------------------- 具体的なSQL文でなくとも構いません。参考になるような情報、サイトをご存じでしたら、教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLのDATE型と年の比較

    こんにちは。 PHPとMySQLでレポートの作成・管理をしようとしています。 新規登録の画面でレポートの日付をDATE型で登録しています。 一覧で表示をさすのに、 デフォルトで登録日が今年のものだけを表示したいのですが、出来ません・・・ SQL文は $time = mktime(); $time = date("Y-m-j", $time); $sql = "SELECT * FROM t_repo WHERE re11 >= " .$time. " ORDER BY re11"; としています。 しかし全てのレポートが出てしまいます・・・ なんとかこれを今年のレポートだけが表示され、 【前年へ】・【次年へ】のボタンがおせば、現在表示されている前の年・次の年のレポートが表示されるようにしたいのですが、ここからどうしたらいいのでしょうか? すみませんが、ご教授の程をよろしくお願いします。

    • ベストアンサー
    • PHP
  • MYSQLのUPDATEについて

    MYSQLのUPDATEについて こんにちは。MYSQLを最近勉強しはじめました。従来はACCESS2003を使っています。 全く同じテーブルをMYSQL側とACCESS側で用意しました。 あるフィールドに対し、UPDATE文をかけたら、MYSQLとACCESSではアップデートされた数に差がありました。 データ型も全て同じなのに、なぜ差がうまれるのか考えました。 例えば、「数量」という列にアップデートをかけるとします。 アップデート前のある行の数量が「0」とします。 アップデートしたい数量も「0」とします。 Accessはアップデート前、アップデート後、同じ数量でアップデートする場合もカウントする。 MYSQLはアップデート前とアップデート後の数量が同じであれば、アップデートしない。 と考えましたが、この考えは正しいでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlに格納されている日付のデータから重複なしで年を取得する方法

    mysqlに格納されている日付のデータから重複なしで年を取得する方法 を検討しているのですが、どなたかご教授していただければと 思います。 下記のデータベースの場合 2007 2008 2009 2011 といった値を抽出したいと考えております。 どうぞよろしくお願いいたします。 mysql> select*LOGS; +-----+---------------------+------+ | UPDATE_DATE | ITEM_NO | +---------------------+------+ | 2007-07-05 14:35:35 | 1 | | 2007-07-05 14:42:20 | 5 | | 2008-07-06 00:01:20 | 12 | | 2009-07-06 13:38:16 | 13 | | 2009-07-06 13:47:45 | 13 | | 2011-07-06 13:54:10 | 2 | +---------------------+------+

    • ベストアンサー
    • MySQL
  • Flash→PHP→MySQLへの値の受け渡しについて

    現在、Flashのフォームで受け取った値をPHP経由でMySQLへデータを格納するシステムを作成しています。 現在、詰まっている点とは、Flashで送信したデータがMySQLまで到達できないというところです。 少し分析してみたところ、PHPを単独でブラウザにて開くと "フィールドが取得できません。" と出力されていました。 これは、 ----- <?php $setsuzoku = mysql_connect("localhost", "*****", "*****"); if (! $setsuzoku) { die ("データベースに接続できません"); } if (! mysql_select_db ("test")) { die ("データベースが取得できません"); } mysql_query("INSERT INTO rank VALUES('".$HTTP_GET_VARS['nickname']."', ".$HTTP_GET_VARS['score']); if (!$fd) { die ("フィールドが取得できません。"); } // 処理が終わったことを知らせる print('OK'); ----- というプログラムで動かしていまして、『mysql_select_db ("test")』まで動作しているのではないかと思われます。 ですので、もしかしたらFlash以前にPHPとSQLの連携がうまくいっていないような気がするのですが…どうでしょうか? Flashからの情報を送信するシステムである以上、PHPで表示すると必ずこのような形になるのでしょうか? ちなみにMySQLには、必要なDatabaseとテーブルを作成しました。 問題の切り分けは一応してみましたが、間違っているかもしれません。何かご教授頂ければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • MySQLのUPDATE文でサブクエリ

    MySQLのUPDATE文でサブクエリの使い方について教えて下さい。 MySQLのUPDATE文でサブクエリを使うと「#1093 - You can't specify target table 'exam' for update in FROM clause 」というエラーになってしまいます。 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 ということはわかりましたが、これに従いSQL文を変更してもうまくいきません。 どのようにSQL文を作ったら良いか教えていただければと思います。 環境 PHP:5.1.6 MySQL:5.0.77 ------具体的なSQL文--------------------------------------- テーブル名:sample カラム名:date(DATETIME型),name,flag 上記テーブルに対して、 1.社員(列名:nameのsuzuki)の最新出勤日(列名:date)のflagを1にする 2.社員(列名:nameのsuzuki)の最新出勤日以外(列名:date)のflagを2にする という処理をしたいと思います。 まず、SELECT文を作ってみました。 1.最新出勤日データを抽出 SELECT * FROM sample WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 SELECT * FROM sample WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' これをUPDATE文に変更すると、 #1093 - You can't specify target table 'exam' for update in FROM clause というエラーになります。 上記をUPDATE文に変更 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' エラー文を検索したところ下記のような情報を見つけることができました。 「仕事SPOT」 MySQLでサブクエリ(エラー#1093を回避する方法) http://wsjp.blogspot.com/2009/12/mysql1093.html 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 と記載されています。 このページに掲載してあるように変更を加えてみました。 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) as test_max from sample)) as text_tb and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) as test_max FROM sample)) as test_tb and name='suzuki' これでもエラーになってしまい、うまくいきません。

    • ベストアンサー
    • PHP
  • MySQL 今導入するならどのバージョンがオススメ?

    現在、MySQL4026にて開発してるのですが、 今後のことを考えると、稼動前の今のうちに4.1以上に上げようかと思っています。 現状(4.0)にて特に不満はないのですが、稼動後に4.0から4.1以上にバージョンアップするのは、問題が多い、といろんなところで目にします。 パフォーマンス的には、4.0 4.1 5.0などにそれほど差はないのでしょうか? まだ5.0は本稼動に使えるようなものではないと思いますので、4.0か4.1という選択肢になるかと思います。 みなさんは、どうするべきだと思われますか? アドバイスいただけたらと思います。 UPDATE,SELECT共に多いコミュニティ系サイトに使う予定です。トランザクションも利用します。

    • ベストアンサー
    • MySQL
  • MySQL 複数テーブルのフィールドにUPDATE

    よろしくお願いします。 PHP5、MySQL5、 PEAR DB、Smarty にて開発しております。 標題にもありますように、LEFT JOINを使ってUPDATEできる方法を探しております。 ●Aテーブル(親) id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 ●Bテーブル id | del_flag ----------------- 1 | 0 3 | 0 4 | 0 ●Cテーブル id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 上記のような3つ、またはもしくはそれ以上テーブルがあったとします。 そこで、 Aテーブルの id 2 のdel_flagを1 とアップデートしたときに、 同時に全てのB、Cのテーブルの id 2 のdel_flagも 1 としたく思います。 Bテーブルには、id 2 が存在しないため、結果的にはCテーブルだけが更新されますが、 A、B,Cともに同一のid値 がある場合も考慮して、 アップデートしたいと思います。 そこで、PHP内で、一つ一つのテーブルを地道にアップデートすることは可能だとおもいますが、 一度のSQLでdel_flagの値を1とできる方法はございませんでしょうか? お手数ですが、 具体的なクエリを書いていただけると、大変助かります。 いろいろ調べましたが、なかなか上手くいかず・・・・。 よろしくお願いいいたします。  

    • ベストアンサー
    • MySQL
  • MySQLのエラー出力

    MySQLで、テーブルのnumberフィールドのレコードでidフィールドのレコードとpwフィールドのレコードを取り出すことをしています。 $sql = mysql_connect('mysql.example.com', 'user', 'pass'); mysql_select_db('exampledb'); $result = mysql_query("SELECT * FROM `memberlist` WHERE `number` = '{$number}'"); while ($row = mysql_fetch_object($result)){ echo "ID:{$row->id}"; echo "PW:{$row->pw}"; } +------+------+------+ |number|id----|pw----| +------+------+------+ |000001|userid|userpw| +------+------+------+ この場合、$numberに000001を代入することで object(stdClass)#1 (3) { ["number"]=> string(6) "000001" ["id"]=> string(6) "userid" ["pw"]=> string(6) "userpw" } となりますが、 これが、もし$numberにnumberフィールドのレコードに無い値が代入された場合、どうやってエラーを出せばいいのですか?

    • ベストアンサー
    • PHP
  • MySQLのdate型をphpで○年○月○日と表示したい

    MySQL5+PHP5の環境でMySQLのフィールドにdate型で2008-09-25のように本の発売日がデータが格納されています。 PHPで2008-09-25を2008年9月25日というように表示したいのですが、どのような関数を使えばいいのでしょうか。 やりたいことは、本の発売日をphpのフォームからMySQLに格納して、2008年9月25日のように自由に整形表示したいです。 また、月別のデータ表示や日付の計算なんかもしたいのですが、このような場合、MySQL側をdate型にしないで他の型にしたほうがいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP