HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

■14341 / 親記事)  月毎の日数端数を切り捨てた月期間の計算について
  
□投稿者/ TS -(2024/05/18(Sat) 08:51:35)
    2024/05/18(Sat) 09:03:07 編集(投稿者)

     いつもお世話になっております。

     ・桐V9 2012

     表定義において、項目計算式で期間の計算をするにあたり、
    月毎の端数は切り捨て、日数フルの月は1ヶ月として、
    期間の計算をしたいと考えていますが、計算式等が思い浮かばす数日間(今週月より)悩んでおります。
     ついては、式や項目のデータ型等ご教示いただければと思います。
     よろしくお願いします。

    (例)
    2024年4月12日 から 2024年7月29日 → 2ヶ月

     ×  2024年4月12日 から 2024年4月30日
    1ヶ月 2024年5月1日 から 2024年5月31日
    1ヶ月 2024年6月1日 から 2024年6月30日
     ×  2024年7月1日 から 2024年7月29日
引用返信 [メール受信/OFF] 削除キー/
■14342 / ResNo.1)  Re[1]: 月毎の日数端数を切り捨てた月期間の計算について
□投稿者/ ONnoji -(2024/05/18(Sat) 16:24:07)
    2024/05/19(Sun) 06:49:03 編集(投稿者)
    2024/05/18(Sat) 16:25:20 編集(投稿者)

    >  ・桐V9 2012
    > (例)
    > 2024年4月12日 から 2024年7月29日 → 2ヶ月

    2024年4月12日とか2024年7月29日と言われても・・・

    表(.tbl)の定義の項目のデータ型はなんでしょうか?

    1.文字列型 ?
    2.数値型  ??
    3.日時型  ???

    どれでしょうか?

    1.または3.の場合には、日時をどのように表現している形式を教えてください。



    1.の場合 yyyy.mm.dd など具体的に

    2.の場合 20240412  など具体的に


引用返信 [メール受信/OFF] 削除キー/
■14343 / ResNo.2)  Re[1]: 月毎の日数端数を切り捨てた月期間の計算について
□投稿者/ うにん -(2024/05/18(Sat) 17:37:48)
    開始日が1日でなければ翌月1日
    終了日が末日でなければ前月末日
    以上の月数を計算(マイナスなら0)
    でいいのでは。
引用返信 [メール受信/OFF] 削除キー/
■14344 / ResNo.3)  Re[1]: 月毎の日数端数を切り捨てた月期間の計算について
□投稿者/ TS -(2024/05/18(Sat) 18:13:50)
    2024/05/18(Sat) 21:07:47 編集(投稿者)
    2024/05/18(Sat) 21:04:27 編集(投稿者)

    ONnoji 様、うにん 様 回答いただきましてありがとうございます。


    ●_ONnoji 様

    > 表(.tbl)の定義の項目のデータ型はなんでしょうか?

     数値型 で定義しています。

     [起算開始]、[起算終了]としております。

    > 2.の場合 20240412  など具体的に

     まさに、記載されているとおりのデータとなっています。


    (例)

    [起算開始]、[起算終了]

    20240412  20240729


    ●_うにん 様

    > 終了日が末日でなければ前月末日

     末日の判定の仕方、フル日数月の月数カウントアップの方法等

    もう少しヒント等いただけると助かります。


     よろしくお願いいたします。

引用返信 [メール受信/OFF] 削除キー/
■14346 / ResNo.4)  Re[2]: 月毎の日数端数を切り捨てた月期間の計算について
□投稿者/ ONnoji -(2024/05/18(Sat) 22:01:40)
    2024/05/18(Sat) 23:00:38 編集(投稿者)
    2024/05/18(Sat) 22:16:44 編集(投稿者)

    >>表(.tbl)の定義の項目のデータ型はなんでしょうか?
    >  数値型 で定義しています。
    >  [起算開始]、[起算終了]としております。
    >>2.の場合 20240412  など具体的に
    >  まさに、記載されているとおりのデータとなっています。
    > (例)
    > [起算開始]、[起算終了]
    > 20240412  20240729

    それを早く言ってほしかったなぁ〜〜〜〜〜〜 (ーー;)--------------> ※遠い目線

    当方はこの週末には時間が取れないので、他の回答者にバトンタッチします。

    p.s.

    表の定義は自由なので、日付を数値型で保持すること自体に問題はありません。

    しかし、日付を数値型で保持すると、とても面倒になるのでおススメしませんよ。

    そもそも、日付は加算(+)と減算(-)が可能ですが、乗算(*)と除算(/)の対象ではありませんよね。

    このように、日付は四則演算の対象ではありませんので、文字列型または日時型であるのが自然です。

    一般的に四則演算の対象というのは、加算・減算・乗算・除算はもちろんですが、合計や平均を求めるデータの事です。

    つまり、体重や身長のようなものは数値型ですが、電話番号や郵便番号は文字列型です。

    電話番号や郵便番号では、加算・減算・乗算・除算はもちろんですが、合計や平均も求めませんよね。

    しかし、単純に数字以外の文字が入力されるのを防ぐだけの目的で数値型にする人って非常に多いんですよね。(^^ゞ
        ・・・・・・・・・・・・・・・・・・・・・・・・・

    日付は、本質的に文字列型または日時型であるのが自然ですよ。

    ※これは個人( ONnoji )の感想です。

    p.p.s

    > 開始日が1日でなければ翌月1日
    > 終了日が末日でなければ前月末日
    > 以上の月数を計算(マイナスなら0)
    > でいいのでは。

    うにんさんの解法は正解だと思いますよ。

    当方も同じアプローチを考えていました。

引用返信 [メール受信/OFF] 削除キー/
■14347 / ResNo.5)  Re[3]: 月毎の日数端数を切り捨てた月期間の計算について
□投稿者/ TS -(2024/05/18(Sat) 22:21:25)
    2024/05/18(Sat) 22:22:58 編集(投稿者)

    ONnoji 様 回答いただき有難うございます。

    > 日付は、本質的に文字列型または日時型であるのが自然ですよ。

     勉強になります。

     TBLをバックアップコピーし、

    [起算開始]、[起算終了] のデータ型を日時型にしてみたいと思います。

引用返信 [メール受信/OFF] 削除キー/
■14348 / ResNo.6)  Re[4]: 月毎の日数端数を切り捨てた月期間の計算について
□投稿者/ MAKOTO -(2024/05/18(Sat) 22:32:01)
    TSさんこんにちは
    適当に作ってみました。
    関数はヘルプを参照してください。
    半角の#を押して右に矢印キーを押すと参考になる記述が
    出ます。


TS.zip
/1KB
引用返信 [メール受信/OFF] 削除キー/
■14349 / ResNo.7)  Re[5]: 月毎の日数端数を切り捨てた月期間の計算について
□投稿者/ TS -(2024/05/19(Sun) 10:45:24)
    MAKOTO 様 回答 また、添付ファイルの表を作成していただき有難うございました。


    [開始期間]、[終了期間]、[開始日]、[終了日]が

    確かに日時型になっており、[月数]で求めたい月数が出力されていました。

     やりたかったことが実現されており、大変助かりました。

     日時型 のデータは扱いづらい印象があり、

    ついついデータ型として使うことにおっくうになっていました。

     また、今回照会させてもらった既テーブルのデータ型変更

    (及びデータの再入力・チェック)に時間がかかってしまい、

    返信が遅れてしまいすいませんでした。

     大変に勉強になりました。

     本当に有難うございました。

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■14357 / ResNo.8)  Re[2]: 日付が火付けになってしまった
□投稿者/ ONnoji -(2024/05/20(Mon) 21:39:13)
    2024/05/22(Wed) 10:53:31 編集(投稿者)
    2024/05/20(Mon) 22:40:11 編集(投稿者)

    TSさん

    >> 日付は、本質的に文字列型または日時型であるのが自然ですよ。
    >
    > 勉強になります。
    > TBLをバックアップコピーし、
    > [起算開始]、[起算終了] のデータ型を日時型にしてみたいと思います。
    > また、今回照会させてもらった既テーブルのデータ型変更
    > (及びデータの再入力・チェック)に時間がかかってしまい、

    当方は土日月とPCの前に居ませんでしたので、ご返事が遅れました。

    当方の発言で、なんかマッチで火を付けてしまったような気がしています。

    今まで、数値型でデータを蓄積してきたのですから、それ自体には問題は無いのですよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ただ、一般論で言うと

    文字列型の日付文字列のデータか、日時型のデータが、日付の処理に適していますよと申し上げた次第です。

    ややこしい事をしようとすると、

    数値型 → 文字列型(日付文字列) → (必要に応じて)日時型

     または

    数値型 → 日時型

    の変換が必要になるので、数値型よりも云々と申し上げたわけです。
     ・・・・・・・・

    それが・・・、まさか表の定義を変更してしまうとは思っていませんでしたので非常に驚いてしまいました。

    日付が火付けになってしまったようで恐縮です。m(__)m

    p.s.

    確かに入力の際に0〜9の数字と正負記号しか受け付けないという特性は便利です。※指数表現も受け付けるでしょうけれども(^^ゞ

    なので、数値型で入力を受け取るというのは実践的なテクニックと言えますよ。

    だから、オペレータが入力する項目として数値型であっても何ら問題はないのです。※私は表の定義は自由だと申し上げていましたよ
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    しかし、それとは別に数値を日付として処理する場合にはちょっと面倒になるわけです。

    そこで、入力と日付計算のどちらか一方を選ぶのではなく、入力は数値型、計算のタネは日時型というように考えることも出来ます。
                               ◎◎・・・・ ◎◎・・・・・・・
    つまり、

    [入力用の数値型項目]と[日時型の計算項目]をペアで運用するというのもアリだろうと思います。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    [日時型の計算項目]の計算式は、毎回同じなのでいわずもがなですが・・・

     #日時値( #sstr( #str( [数値型項目], 1, 4 ) + "-" + #sstr( #str( [数値型項目], 5, 2 ) + "-" + #sstr( #str( [数値型項目], 7, 2 ) )
                            ↑                    ↑
                          区切り文字はお好きなものを        区切り文字はお好きなものを

    もしも、[文字列型の計算項目]がよろしければ

     #sstr( #str( [数値型項目], 1, 4 ) + "-" + #sstr( #str( [数値型項目], 5, 2 ) + "-" + #sstr( #str( [数値型項目], 7, 2 )
                        ↑                     ↑
                     区切り文字はお好きなものを        区切り文字はお好きなものを

    ↑これは毎回の変換手順でワンパターンですから、もう何度もご覧になって目に焼き付いているかもしれませんね???
                           ・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    このように、日時型に変換するか、文字列型の日付文字列に変換すれば、日時に関する各種の関数が利用できるわけです。

    でも、数値型の場合には何もできないのです、しかし、オペレータの入力する項目という見方からすれば実践的ですね。

    オペレータさんの入力のやり易さを優先して、なおかつ日時の計算が簡単に出来るようにとハイブリッドな表定義にするのが望ましいかもしれませんね。

    なお、今回は早合点して拙速に表の定義を変えたりしないでくださいね。

    あくまでも、当方( ONnoji )は他人ですから、TSさんの状況を事細かに把握して強制・矯正しているわけではないのです。

    だから「あ〜、また ONnoji が何か言ってるよ。」という程度に気楽に読んでください。

    p.p.s.

    ヘルプでキーワード: 日付文字列 を検索してください。

    "日付文字列"は、日時型が存在しなかったDOS桐の時から日時の計算をする時の基本です。

    "日付文字列"の知識は基本中の基本ですから、必ずヘルプを読んでくださいね。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    [桐 - ヘルプ]→ データと式 → 計算式 → 日時の計算 → 日時文字列

    日時型は、"日付文字列"に時刻(時分秒:hms)を追加したデータ型と思ってください。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

引用返信 [メール受信/OFF] 削除キー/
■14372 / ResNo.9)  Re[3]: 日付が火付けになってしまった
□投稿者/ TS -(2024/05/22(Wed) 23:04:10)
    ONnoji 様


    > あくまでも、当方( ONnoji )は他人ですから、TSさんの状況を事細かに把握して強制・矯正しているわけでは

    > ないのです。だから「あ〜、また ONnoji が何か言ってるよ。」という程度に気楽に読んでください。

     桐のベテランユーザ(ONnoji様等)から直接御指南していただけるものは、素直に耳を傾けさせてただこうと思っております。

    > #日時値( #sstr( #str( [数値型項目], 1, 4 ) + "-" + #sstr( #str( [数値型項目], 5, 2 ) + "-" + #sstr( #str( [数値型項目], 7, 2 ) )

    >  #sstr( #str( [数値型項目], 1, 4 ) + "-" + #sstr( #str( [数値型項目], 5, 2 ) + "-" + #sstr( #str( [数値型項目], 7, 2 )

     すごいです。これを知っておくだけでも、非常時に相当役立つ感じがします。


    > 日時型は、"日付文字列"に時刻(時分秒:hms)を追加したデータ型と思ってください。

     なるほど、そう考えると少しとっつきにくい感が低くなった気がします。

     仕事の関係で、返事が少し遅くなってしまいましたが、今回の回答に関しては、

    良い勉強になったと感じております。

     引き続きご指導等いただければと思います。

     本当に有難うございました。

引用返信 [メール受信/OFF] 削除キー/

次のレス10件>

スレッド内ページ移動 / << 0 | 1 >>

このスレッドに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -