MySQL5で日付計算して件数取得の方法

このQ&Aのポイント
  • MySQL5を使って、特定の日付を計算して本日と同じデータの件数を取得する方法について教えてください。
  • 年月日のフィールドを日付に変換し、days-5の値を引いた日が本日と同じデータの件数を取得する方法を教えてください。
  • SQLを使用して、MySQL5で日付を計算して特定のデータの件数を取得する方法を教えてください。
回答を見る
  • ベストアンサー

日付を計算して件数を取得

お世話になります。 よろしくお願いします。 MySQL5を使っています。 現在 year month day days の4つのフィールドがあり、それぞれに 2008 03 01 10 2008 03 02 20 というデータが入っているとします。 daysは数値です。 year,month,dayを日付に直して days-5の値を引いた日が本日と同じデータの件数を取得したいのですが SQLだけで可能でしょうか? たとえば、今日が2008-03-17だとすると 2008-03-01に(10-5)を足すと2008-03-05なので偽 2008-03-02に(20-5)を足すと2008-03-17なので真 なので1件 みたいな感じです。 よろしくお願いします。

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

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

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

たとえばこんなかんじ SELECT CURDATE()=DATE_ADD(CONCAT(`year`,'-',`month`,'-',`day`),INTERVAL (`days` - 5) DAY) AS CHK FROM hoge >2008-03-01に(10-5)を足すと2008-03-05なので偽 3/1の5日後は3/6ですね(苦笑)

SAY_MAN
質問者

お礼

早速の返信ありがとうございます >>2008-03-01に(10-5)を足すと2008-03-05なので偽 >3/1の5日後は3/6ですね(苦笑) お恥ずかしい(汗 掲示して頂いた関数をたどり無事解決できました ありがとうございました。

関連するQ&A

  • 日付取得

    ある変数に$year='2003', $month='1', $day='5' となっている場合 配列$dateに '2003/1/5' '2003/1/4' '2003/1/3' '2003/1/2' '2003/1/1' '2002/12/31' '2002/12/30'とデータを取得したいです。 また $year='2003', $month='1', $day='' の場合は '2003/1' '2002/12' '2002/11' '2002/10' '2002/9' '2002/8' '2002/7' と取得したいのですが どのようにすればよろしいのでしょうか? すみませんが宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • oracleのsqlで日付判断

    テーブルに以下の以下の様に日付が登録されています。、 cal_year cal_month cal_day item1 item2 item3 ・・・・・・ : 2019 6 29 2019 6 30 2019 7 1 2019 7 2 ; 2019 7 10 2019 7 11 ; 2019 7 20 2019 7 21 : 2019 7 31 2019 8 1 2019 8 2 : 見ての通り、テーブルに登録されている日付が、年、月、日と各々で 登録されており、また、月と日には、ゼロ埋めされてない値となって います。 因みに、cal_year、cal_month、cal_dayの属性は、varchar2です。 以下のsqlで、日付指定で、システム日付より以降の日付のデータを 取得しようとしているのですが、上手く行きません。 select * from tableA where cal_year||cal_month||cal_day>to_char(sysdate,'FMYYYYMMDD') order by cal_year,to_number(cal_month),to_number(cal_day) ; 今日、2019/7/22でやると、「2019 7 3」以降が出力されます。 また、日付を直接指定するとエラーとなります。 select * from tableA where cal_year||cal_month||cal_day>to_char('2019722','FMYYYYMMDD') order by cal_year,to_number(cal_month),to_number(cal_day) ; 「SQL : ORA-01481: 数値書式モデルが無効です」となります。 何がいけないのでしょうか。 このような使い方はダメなのでしょうか。 それとも、使わない使い方をしているのでしょうか。 お願いいたします。

  • ファイルメーカーのスクリプトで25日締めの請求データを作成していますが・・・

    毎度お世話になります。 ファイルメーカーVer4.0 OS=Win2000です。 毎月25日で締めて請求書を起こすために、締め日の翌日(26日)から締め日までのデータを検索して表示するスクリプトを作成しております。 「計算結果を貼り付け」で現在の日付から、表示させる締め日を貼り付けて、検索させようとしております。 見づらくて申し訳ございませんが、本日の日付を拾ったあと、下記の計算をさせようとしていますが、「関数のカンマの数が多すぎます」とエラーが出て困っています。 if(Month ( 本日 )=1, if(Day ( 本日 ) < 26, Year ( 本日 )-1 & "/" & Month ( 本日 )-2 &"/" & 26 & "..." & Year( 本日 )-1 & "/" & Month ( 本日 )-1 &"/" &25, Year ( 本日 )-1 & "/" & Month ( 本日 )-1 &"/" & 26 & "..." & Year( 本日 ) & "/" & Month ( 本日 ) &"/" &25, if(Month ( 本日 )=2, if(Day ( 本日 ) < 26, Year ( 本日 )-1 & "/" & Month ( 本日 )-2 & "/" & 26 & "..." & Year ( 本日 ) & "/" & Month ( 本日 )-1 & "/" & 25, Year ( 本日 ) & "/" & Month ( 本日 )-1 & "/" & 26 & "..." & Year ( 本日 ) & "/" & Month ( 本日 ) & "/" & 25, if(Day ( 本日 ) < 26, Year ( 本日 ) & "/" & Month ( 本日 )-2 & "/" & 26 & "..." & Year ( 本日 ) & "/" & Month ( 本日 )-1 & "/" & 25, Year ( 本日 ) & "/" & Month ( 本日 )-1 & "/" & 26 & "..." & Year ( 本日 ) & "/" & Month ( 本日 ) & "/" & 25))))) ※(本日)とはフィールド名で、スクリプトの最初に「現在の日付を貼り付ける」を入れてありますので、スクリプト起動時に当日の日付が入力されます。 要は、当日が25日までであれば、1月は前年の11月26~12月25日を表示し、 2月は前年の12月26~翌年の1月25日を表示し、3月から12月までは、当日が25日までは、前々月の26日~前月の25日迄を表示し、26日~末日までは前月の26日~当月の25日を表示させて、それを作業日のフィールドに貼り付けて検索すれば、直近の25日締めで表示されると考えました。 どこが違うのでしょうか?

  • 日付を入力するには?

    PHP+SQLサーバ2003でWEB作成をしています。 PHPでPOSTされた年月日をSQLサーバのカラム(smalldate型)に格納したいのですが、入力された通りにはDBに日付が格納されないのです。 例)2007/10/10 → (DB)1905/06/14 ソースはこんな感じです。 //年、月、日と入力された値を"年/月/日" の形にする $day = implode("/",array($_POST["year"],$_POST["month"],$_POST["day"])); //入力された日付をDBに格納する。 $sql = "insert into table_name(date) values($day)"; 根本的に何かが間違っていると思われるのですが、よくわかりません。 どなたかアドバイスお願いします。

  • ファイルメーカーPRO 5を使ってます 日付を入力してDayNameJ

    ファイルメーカーPRO 5を使ってます。日付を入力してDayNameJ(日付)で曜日を表示させてます。 所が、日付を変更しても曜日が変わりませんどうしたら変更出来ますか? 後、毎月15日を堺に支払月を変更したいと思って関数を使って計算式を入れているのですが計算が出来ません。 If(Day(日付) <= 15,Date(Year(日付),Month(日付),15),Date(Year(日付),Month(日付)+1,15))と入れてます。 たとえば、日付に2009/06/17と入力すると 支払月が0182/05/07となってしまいます。 どうしてでしょうか? 日付、支払月は日付フィールドになってます。 もう一つすみません。 日付を年、月、日のそれぞれのフィールドに分割したくてそれぞれに  年、Year(日付) 月、month(日付) 日、day(日付)と計算式をいれたのですが、日付フィールドにして、日付書式のカスタムでそれぞれ年、月、日を表示するようにしたら 年、0006 月、01 日、17になっていまいます。日付フィールドをやめて数字フィールドにすると年、2009 月、06 日、17とちゃんと出てきます。 日付フィールドではダメって事でしょうか? 計算式をいれている所は日付をかえても計算し直してくれません。どうしたら良いのでしょうか? いろんな質問をしてすみませんが宜しくお願いします。

  • 日付取得に関して

    始めまして。 今回、開発練習として、カプセル化をメインとして開発練習としてDateクラスやカレンダークラスを使用しないで日付などを取得すると言う過大なのですが、正解を教えてください。 与えられているものを下記に記入します!! public class UserDate{ //現在の時刻からインスタンスを作成     public UserDate(){ } //初期値を設定してインスタンスを作成。曜日は //与えられた値から計算。 public UserDate(int _year,int _month,int _day,int_hour ,int _minute,int _second){ } //文字列形式で渡された日付を解析して、日付を設定する。 public void parse(String str) throw lllegalArgumentException{ } //文字列形式で日付を返す。 public String getString(){ return ; } //日付を取得する。 public int getDay(){ return -1; } // public void setDay(int _day) throws lllegalArgumentException{ } //カレンダーオブジェクトから日付情報を返す。 public Calender getCalendar(){ return ; } カレンダーオブジェクトから日付情報を設定する。 public void setCalender(Carender cal) throes lllegalArgumentException{ } }

  • PHPでPOSTした入力日の日付の+1日を取得したいです。

    PHPでPOSTした入力日の日付の+1日を取得したいです。 POSTされた値は以下です。 年 $y_pre = $_POST['year']; 月 $m_pre = $_POST['month']; 日 $d_pre = $_POST['day']; 以下はPOSTされた値の加工です。 日付加工  $s_ymd_pre = mktime(0,0,0,$m_pre,$d_pre,$y_pre); 日付加工  $ymd_pre = date("Y-m-d",$s_ymd_pre); ここから+1日のデータを取得したいです。 どうぞよろしくお願いいたします。

  • 【SQL】日付の取得(ある日付を省いて指定日数を取得したい)

    Aテーブルの日付フィールドを見て、引数の日付から過去7日間のデータを取得したいのですが、 その際に Bテーブルの日付と取得不可フラグを参照し、取得しようとしている日付(引数から過去7日間)に取得不可フラグ=1がたっていれば、Aテーブルの日付7日間のカウントに含めない としたいのですが、その判断を1回のSQLで取得することは可能でしょうか。 MINUSを使用しようとしましたが上手くいきませんでした。 お手数ですが、ご回答いただけますでしょうか。 宜しくお願いします。

  • 日付が上手く取得できないです

    $row['date'] で吐き出してます。 この吐き出したデータの最大値を取得したいです。 5/5 5/10 5/20 なら5/20を取りたいわけです。 しかし、この日付。max()で正常な最大値が取得できないです。SQLのORDER BYなら日付でも判別しますが なにか方法はないですか?? あくまでも一度全部の日付をだしたいので、SQLで最大値をとるのでは、ちょっと違ってしまうです。

    • ベストアンサー
    • PHP
  • 日付計算について

    エクセルのEOMONTH関数についてお尋ねします。 例えば、請求日によって締切日を変更する(月が変わる)、 =IF(DAY(A1)>=16,EOMONTH(A1,1),EOMONTH(A1,0)) という数式は、一番ベーシックなものであるかと存じます。 考え方はこれとまったく同じなのですが、求める日付が当月末&翌月末ではないのです。 3ヶ月後の10日&4ヶ月後の10日になるようにしたいのです。 EOMONTH()←この()内で求める値を変化させればよいのでしょうか? だとすれば、どのような形にすれば良いでしょうか? また、EOMONTH関数ではダメということであれば、どのようにすれば求められるのでしょうか。 =DATE(YEAR(S1),MONTH(S1)+1,10) をつかってみたり、色々調べてEOMONTHに辿りついたのですが、 3ヶ月後&4ヶ月後、おまけに月末以外の日付(締日の関係上)という2点で 行き詰ってしまいました。 Excelは2003と2007の2種類のバージョンで利用しております。 どうかよろしくお願い申し上げます。