-PR-
解決済み

ACCESS97で現在の日付から勤続年月数を算出する関数

  • 困ってます
  • 質問No.24251
  • 閲覧数2543
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

ACCESS97で社員名簿を作っています。

現在の日付から年齢を算出する関数は調べたところ次のようにすればよいとわかりました。
IIf(Right(Format([生年月日],"yyyy/mm/dd"),5)>Right(Format(Now(),"yyyy/mm/dd"),5),DateDiff("yyyy",[生年月日],Now())-1,DateDiff("yyyy",[生年月日],Now()))

次は現在日から入社年月日フィールドにあるデータを使い、勤続年数○年○ヶ月というクエリーを作りたいのですが、○ヶ月を算出する応用がわからずに困っております。
どうかよろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル13

ベストアンサー率 46% (643/1383)

これは、DateDiff関数が、月単位で日付を数えている事に起因する問題ですね。
DateDiff('m',#2001/01/31#,#2001/02/01#)
のようにすると、1が表示されます。
日付的には1日しか違わないのに、月だけに着目するとひと月異なっていると判断されるんですね。

ってことで、「どの時点でひと月と判断するのか」を決めておく必要が出てきます。
1月29日(月末より前)に入社した人を2月28日(月末)には勤続一ヶ月と判断するべきか、とか、細かい事を考え出すときりがないので、とりあえずこんな感じで決めてみます。

入社年月日の日の部分とと、現在の年月日の日の部分とを比較してみて、現在の日のほうが大きかったら、既にひと月経過したとみなす。

これを#2の式と組み合わせると、以下のようになります。

IIf(Day(Date())>=Day([入社年月日]),DateDiff('m',[入社年月日],Date())\12 & '年' & DateDiff('m',[入社年月日],Date()) Mod 12 & 'ヶ月',(DateDiff('m',[入社年月日],Date())-1)\12 & '年' & (DateDiff('m',[入社年月日],Date())-1) Mod 12 & 'ヶ月')

なんか、すごい長い式になっちゃいましたが、これで上記のような仕様を満たしているはずです。
お礼コメント
noname#166310

ありがとうございます!
これぞ求めた結果でした!
Accessはよく使うのですが関数は一般的なことしか知らず、自分で応用をきかせようにも発想することもできずにいましたので本当に助かりました。何回も補足になってすみませんでした。
投稿日時 - 2001-01-05 15:56:25
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 46% (643/1383)

日付の差異を求める関数は、DateDiffです。

datediff("yyyy",[入社年月日],date) & "年" & datediff("m",[入社年月日],date) mod 12 & "ヶ月"

ってな感じで記述すればいいでしょう。

mod 演算子は、割り算の余りを計算します。
補足コメント
noname#166310

回答ありがとうございます。
教えていただいたとおりやってみたのですがうまく結果が出ません。
入社年月日フィールドのデータは西暦でyy/mm/ddで入力してあるのですが、データのない社員の分は「年ヶ月」という文字だけが返り、データを入力してある社員の分は「#Error」が返ります。
投稿日時 - 2001-01-04 16:49:54

  • 回答No.2
レベル13

ベストアンサー率 46% (643/1383)

うーん… それなら、

DateDiff('m',[入社年月日],Date()) \ 12 & '年' & DateDiff('m',[入社年月日],Date()) Mod 12 & 'か月'

のようにしても駄目でしょうか?

これでも駄目なら、
DateDiff('m',[入社年月日],Date())
とだけ、クエリのフィールドの部分に入力してみて、それらしき数字が出るかどうか確認してみてください。(3年2ヶ月なら、38(36+2ヶ月)と表示されるはず。)

もしうまくいかなければ、補足してください!
補足コメント
noname#166310

回答ありがとうございます。
うまくいきました!上の方法でうまくいったんですけど、勤続2週間の社員が勤続0年1ヶ月のように月未満の分も繰り上げられてしまうのですがよい方法はありませんか?
たびたびすみませんがご存知でしたらお願いします。
投稿日時 - 2001-01-05 10:51:05
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ