• ベストアンサー

datetime型で日付計算ができません。

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

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

date_add(start_date, interval 20 day) < now() これでできませんかね。

natsuyori
質問者

お礼

ありがとうございます。 あれからSMARTというサイトで結構情報が事が書いてあり解決できました。

関連するQ&A

  • MySQLのDatetime型の引き算

    ある機械の1日当たりの処理数を計算したいと思います。 Datetimeの引き算がうまくいかないので、解決方法を教えてください。 1日当たりの処理数は下記の式で計算できます。 1日当たりの処理数=期間内処理数÷((現在日時-作業開始日時)÷(60×60×24)) ※現在日時-作業開始日時で期間の秒数を計算 それを1日の秒数=86400秒(60秒×60分×24時間)で割る。 ------------------ 環境 MySQL:5.0.77 ------------------ テーブル: test カラム :num(INT型),start_date(DATETIME型) ※numは期間内の機械の処理数です。 まず、上記の1日当たりの処理数の数式をSQL文に反映させてみました。 SELECT num , num/((now()-start_date)/86400) as shorisu FROM test 結果は表示されるのですが、かなり大きな数値になって出てきてしまいます。 WEBで情報を検索したところ、DATETIME型を直接減算すると求める結果にならないことはわかりました。 MySQLのページ(11.5. 日付時刻関数) http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html を見てみましたが、どの関数を使えばよいのかいまいちわかりません。 now()-start_dateの部分が正しい値を返すようになれば良いのですが、どのような式を書けばよいのでしょうか?

    • ベストアンサー
    • PHP
  • MySQLのDatetime型の検索方法

    MySQLのDatetime型で 時間部分が00:00:00のデーターだけを抽出する方法を教えてください。 MySQLのデータ(列:Datetime型) 2011-12-01 00:00:00 2011-12-01 20:15:45 2011-12-01 20:46:45 2011-12-02 00:00:00 2011-12-02 11:11:11 2011-12-03 22:22:22 2011-12-04 00:00:00 このようなデータの中から時間部分が「00:00:00」のものを抽出したいと思います。 求める結果は 2011-12-01 00:00:00 2011-12-02 00:00:00 2011-12-04 00:00:00 です。 期間で抽出するのであれば SELECT * FROM `テーブル名` WHERE date>='2012/12/05 00:00:00' AND date<='2012/12/07 23:59:59' のようなクエリで良いと思うのですが、「00:00:00:」が含まれるものだけを抽出しようと思うとうまくいきません。 LIKE 00:00:00 でできるかもしれないと思いましたがダメでした。

    • ベストアンサー
    • MySQL
  • 24時間以内に更新されたデータを取得

    MySQL3で24時間に更新されたデータを取得したいのですが、いまいち方法が分かりません。 select * from test WHERE to_days(now()-60*60*24) > UpdataDate このような形では無理なようなのですが、いい方法はあるでしょうか? UpdataDateはdatetime型です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLのDateTimeにPHPで値セットは?

    初歩的な質問ですみません。 MySQLにとあるテーブルがあって、 その中に 更新日時 という DATETIME 型のフィールドがあるのですが、 insert でレコードを追加する際にそこに現在日時をセットしようとして、 恥ずかしながらその方法がわかりません。 $sql = sprintf('INSERT INTO %s SET %s="%s", %s="%s"',         'tmp',         'mailAddr', e($mailAddr),         'update', date('Y/m/d H:i:s')); mysql_query($sql); とか、 $sql = sprintf('INSERT INTO %s SET %s="%s", %s=cast(now() as datetime)',         'tmp',         'mailAddr', e($mailAddr),         'update'); mysql_query($sql); とか、いろいろ調べて試してみたんですけど...。 上記のように、insert into xxx set~ を使う場合を知りたいです。 すみません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 日付検索で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でTIMESTAMP型の列から現在日付の1週間以内のデータ検索をSQL文で

    タイトルの通りですが、MySQLのSELECT文についてです。 以下のようなテーブルがあったとします。 MEMBER{ ID SMALLINT M_DATE TIMESTAMP} このテーブルのM_DATEが現在の日付から一週間以内であるレコードの検索を以下のようなSQL文で実行しました。 SELECT * FROM MEMBER WHERE M_DATE BETWEEN (NOW() - 00000000070000) AND NOW(); 最初はこれでOKだと思っていたのですが、月をまたいだりした時に抽出されるべきではないレコードが表示されるので間違いに気付いたのですが、どう修正すべきなのか分からない状況です。 どなたか良い方法があれば、教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • nvarcharとdatetimeで作成された日付の抽出方法について

    SQL Server 2005 EXPRESSを使って、 nvarchar型で作成されたyyyy/mm/ddの日付と datetime型で作成されたyyyy/mm/ddの日付を比較し WHERE '2007/05/04' > gettime()のようなSELECT文の WHERE句を使って該当レコードを表示することが可能であれば 教えてください。 以上、宜しくお願いします。

  • 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にも精通しておらず、つたない 質問で申し訳ありませんが、不足する情報は補足しま すので、ご教授お願いいたします。

  • 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
  • 行のカウントを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