• ベストアンサー

開始日と期間で終了日を求める方法を教えて下さい。

こんにちは、開始日と期間で終了日を求める方法を教えて下さい。 java1.4を使用しています。 開始日:2008-08-01(String) 期間:14(int) 営業日だけの数値です。 休日はDBから取得ができ、 月~日までのカラムがあり 休日の場合は、「0」そうでない場合は「1」になっています。 * 休日は任意で「土曜、日曜」だけとは限りません。 上記の数値で計算すると、2008-08-14になりますが、 休日も含めた日数で表示をさせたいです。 表示させたい結果:2008-08-20 本当に、困っています。どうぞよろしくお願いいたします。

  • Java
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
回答No.3

ANo.2 です。 すいません。先ほどの回答間違っていました。 単純に、以下の条件でSQLを発行して、営業日分まわせばいけると思います。 開始日以降の営業日を日付順に取得 where 休日フラグ = 1 and 開始日 <= 日付 order by 日付 もし、余裕があるなら accessならtop postgreSQLならLIMIT oracleならROWNUM などを利用すればrecordSetの最後の値がそれになると思います。

wahiko
質問者

お礼

お礼がおそくなり申しわけございません。 早速のお答え&とても丁寧な解説ありがとうございました。 教えて頂いたSQLで期待する値が取得できました。 本当に助かりました。次回からはテーブル定義も載せるようにします。

その他の回答 (2)

回答No.2

数値で計算するとと記述されているので、 何日という計算をする事は可能なのでしょうか? ということで話を進めますが、 SQLのCOUNT(*)で、休みの日を求めればいいと思います。 SQL文で、休みの日数を取得 (SQLは適当に書いています。group byが必要?) SELECT COUNT(*) FROM emp WHERE 休日フラグが入っているフィールド = 0 and 開始日 から 終了日までの範囲条件 そうすればレコードの値が、休みの日になります。 その分の日数を営業日にたせば、問題ないと思いますよ。 javaの場合、カレンダクラスを利用すれば、 addメソッドがあり、日数を足せば計算出来ます。 そのあたりも必要なら聞いて下さい。

noname#140925
noname#140925
回答No.1

テーブル定義が提示されないと答え辛いのですが・・・ 開始日から一か月分のデータを取得し、単純にフラグの立っている所14個分を数えましょう、としか答えようがないですね。 一週間分のデータが1レコードとして入っている感じですが、日付のデータはどのように入っていて、開始日をどうやって判別しているのか、等が判りませんし。 テーブル定義(出してまずい部分は適当にぼかして構わないので)を提示して貰えると、回答も貰いやすいと思いますよ。

関連するQ&A

  • 開始日と終了日を入力し、その間の期間を表示させたい。

    すみません・・・先程質問したものですが、先程の質問と関連した質問なのですがもしわかる方いらっしゃれば教えて頂けないでしょうか EXCELで以下の画像のような表を作りたいです。 開始日と終了日を入力すると、その間の期間を2種類の方法で表示する。「●年●ヶ月」「●ヶ月」 次に、期間の合計を、上記の2種類の方法で表示する。「●年●ヶ月」「●ヶ月」 例えば、 A2・・・開始日 ※数値直接入力(入力例:2008/4/1) B2・・・終了日 ※数値直接入力(入力例:2009/5/31) C2・・・開始日と終了日の間の期間。表示方法は「●年●ヶ月」 ※計算式や関数などが入る D2・・・開始日と終了日の間の期間。表示方法は「●ヶ月」 ※計算式や関数などが入る 更に、合計も計算したいので C5・・・C2~C4までの合計。表示方法は「●年●ヶ月」 ※計算式や関数などが入る D5・・・D2~D4までの合計。表示方法は「●ヶ月」 ※計算式や関数などが入る という感じです。 ※尚、画像ではD列に表示されてる期間がカッコ()で囲まれていますが、 ややこしければ、カッコ()なしの表示でもOKです。 説明がわかりにくかったらすみません・・・ 尚、バージョンはEXCEL2007です。 よろしくお願いします。

  • Excel:開始日時から終了日時の表示

    例えば、「シート1」の「C3~C6」に日時が入力されているとします。 そして、「D3~D6」に開始日時、「E3~E6」に終了日時、「F3~F6」に「手続き可能中」などの文字を表示したいと思っています。 ただし、条件があります。 ■開始日時について 「D3」に表示する日時:「C3」に入力されている日時から、3ヶ月前(例えば、「C3」に2016年4月30日と入力されているとすれば2016年2月1日となります。)からが「開始日時」となります。開始日時の開始日は必ず「1日」となります。 「D4」に表示する日時:「C4」に入力されている日時から、3ヶ月前(例えば、「C4」に2016年4月30日と入力されているとすれば2016年2月1日となります。)からが「開始日時」となります。開始日時の開始日は必ず「1日」となります。 「D5」に表示する日時:「C5」に入力されている日時から、1ヶ月前(例えば、「C5」に2016年4月30日と入力されているとすれば2016年4月1日となります。)からが「開始日時」となります。開始日時の開始日は必ず「1日」となります。 「D6」に表示する日時:有効期間満了年の誕生日の1ヶ月前。例えば、誕生日が4月15日なら月日のみ3月15日。 ただし、下記の「■表示してはいけない(取り除く)「開始日時」、「終了日時」について」参照。 ■終了日時について 「E3」に表示する日時:基本的には「C3」を表示する。 「E4」に表示する日時:基本的には「C4」を表示する。 「E5」に表示する日時:基本的には「C5」を表示する。 「E6」に表示する日時:基本的には「C6」を表示するが、土曜日、日曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始)に当たるときは、これらの日の翌日までです。 ただし、下記の「■表示してはいけない(取り除く)「開始日時」、「終了日時」について」参照。 ■表示してはいけない(取り除く)「開始日時」、「終了日時」について 「D3」に表示してはいけない日時:土曜日、日曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) 「D4」に表示してはいけない日時:土曜日、日曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) 「D5」に表示してはいけない日時:土曜日、日曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) 「D6」に表示してはいけない日時:土曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) 「E3」に表示してはいけない日時:土曜日、日曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) 「E4」に表示してはいけない日時:土曜日、日曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) 「E5」に表示してはいけない日時:土曜日、日曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) 「E6」に表示してはいけない日時:土曜日、祝日(振替休日を含む)、12月29日~1月3日(年末年始) ■その他 01. いずれも関数のみで表示すること。 02. 祝日は、他のシートとすること。「シート2」とする。 03. 関数式の祝日の設定は、増減・変更の可能性があるためその部分の関数式を変更しなくても永久に使えるようにすること。 条件は以上です。 ■「F3~F6」について 「F3~F6」については、「開始日時」より1日前まででは「手続き必要なし」、「開始日時」から「終了日時」までの期間までなら「手続き可能中」、「終了日時」より1日後以降なら「期限切れ」という文字列を表示したいです。 Excel2010です。 これらの条件を満たした関数式を教えてください。 できれば、関数式の具体的な解説もいただけるとありがたいです。 難しいとは思いますが、回答よろしくお願いします。

  • Accessクエリーにて開始日と終了日から期間を算出

    Accessのクエリーにて、開始日と終了日から該当月の貸し出し期間の算出方法を教えて下さい。 条件ですが、 月単位での算出の為、1ヶ月は「1」、半月は「0.5」で算出します。 当月に開始された明細では、 15日までに開始されれば1ヶ月で算出 16日以降に開始されれば半月で算出 当月に終了された明細では、 15日までに終了されれば半年で算出 16日以降に終了されれば1ヶ月で算出 同月内に開始・終了の場合は1ヶ月で算出 貸し出し中の明細の場合、「終了日」はNULLです。 算出年月 200712の場合のデータは下記の通りです 「算出年月」、「開始日」、「終了日」、 200712、20071210、、、期間は「1」 200712、20071220、、、期間は「0.5」 200712、20050505、20071219、期間は「1」 200712、20061222、、、期間は「1」 200712、20071201、20071210、期間は「1」 宜しくお願い致します。

  • 開始日と終了日が設定されているデータの扱いについて

    開始日と終了日が設定されているデータの扱いについて教えてください。 すでに複数登録されているデータには、開始日と終了日というフィールドが登録されています。  → "開始日","終了日","箱1","箱2" → "051101","051130","a1","a2" → "051201","051231","b1","b2" 新しいデータを追加する際、すでに登録された期間に被っていた場合はエラー表示させたいのですが、そのやり方がわかりません。 (※12月1日~12月31日までというデータがすでに登録されていた場合、  11月1日~12月15日というデータは登録できない、という感じです) とりあえず下記のようにやったりしているのですが、 どうも思ったように動いてくれません また、SELECTを使うものなのか疑問に思っています。 $start_date = "2005-12-01" $end_date = "2005-12-31" $hoge = "SELECT * FROM table_name WHERE ( date_start<='"$start_data"' AND date_end>='"$start_data"' ) OR ( date_start<='"$end_data"' AND date_end>='"$end_data"')"; $db_query = sql_query($hoge,$ID); $array_result = mysql_fetch_array($db_query); if(empty($date_start_check) != TRUE ){ die("この期間内のデータはすでに登録されています。"); } 何卒、良いやり方を教えてくださいm(_ _)mペコリ

    • ベストアンサー
    • MySQL
  • 【Excel2000】開始日と終了日から特定期間の抽出を行う方法

    開始日と終了日がExcelのセルに指定されています。 例) 名前 開始日  終了日 ------------------------ AAA H13.2.3 H16.2.3 BBB H12.1.5 H13.3.3 CCC H15.3.1 H17.2.15 たとえば上記から昨年度一年間の期間(H15.4.1~H16.3.31)を含んだレコードを抽出したい場合、どのようにすればよいでしょうか。なお開始日と終了日の期限はばらばらであり、未来日も存在します。通常のフィルタでは行うことができないと思いますので、他に方法がありましたらお教えください。

  • エクセルで作業期間の日数を計算したい

    エクセルについて質問です。 セルA1に開始日(例:2012/2/20) セルC1に終了日(例:2012/5/12)を入力し、この期間の日数(○○日間)を 計算する方法を教えて下さい。 更にこの期間で、「土日祝日を除いた日数(平日のみの日数)」と 「日曜祝日を除いた日数(平日+祝日でない土曜日の日数)」を算出する方法も教えて下さい。 ちなみに作業日数を計算するのに、DAYS360関数を使ってみましたが、 1年を360日として計算するので、正確な日数になりません。 また、曜日や休日が絡むとどんな関数を使えば良いのか全くわかりません。 よろしくお願いいたします。

  • 待機期間の開始日

    先月6月30日で退職し現在仕事探しています。 今月いっぱいで就業する意向だったため 職安に一度も行っていません。 しかしちょっと苦戦してまして 職安にも失業手当の登録をしようかと考えています。 この場合、待機期間の開始日は職安に登録した日に なるのでしょうか?、それとも前職退職日翌日からに なりますでしょうか?。 待機中に次が決まれば手当は出るようなことも 聞きましたので開始日の影響は大きいですよね。 よろしくお願いします。

  • int timestampの日付計算(Postgres)

    postgres7.3.3で、 int timestamp型で日付計算はできますか? 以下のカラムで、 2004/04/24というSQLで取得したいです。 型     項目名  データ timestamp 開始日  2004/03/25 int    表示日数 30

  • エクセル 日数計算 特定の日だけカウントしない方法

    お尋ねします。 稼働日日数の計算をしたいと思っています。 ただし、土曜日は営業日なので、 日曜日と祝日だけを除いた日数の計算をしたいのです。 例)  12/23~1/15 の 日曜と特定の休日(12/29~1/5)除いた日数の計算 networkday等つかうと、土曜日も休日となってしまうため、困っています。 どなたか知恵を貸してくださいませんでしょうか? よろしくお願いいたします。

  • 開始日(Date型)から終了日(Date型)までを1日毎に表示

    Dateオブジェクトが2つあり↓ (1) 開始日を表すDate型オブジェクト  例.2003/4/10 (2) 終了日を表すDate型オブジェクト  例.2003/5/20 (1)の開始日から(2)の終了日までの日にちを表示したいのですが・・ 例えば、以下のような感じです。 for ( 開始日から終了日までループ ) { 開始日に1日づつ足していき、終了日まで達した場合は、ループを抜ける } <表示例> 2003/4/10 2003/4/11 2003/4/12   ・   ・ (省略)   ・   ・ 2003/5/18 2003/5/19 2003/5/20 これを実現するには どうすればいいでしょうか・・

専門家に質問してみよう