DateDiff関数で、引数に応じてでたらめな値が出てきてしまう理由につきまして


AccessVBAでクエリを作成しておりまして。

●DateDiff関数 …2つの日時の間隔を求める - Officeのチカラ
https://officek.net/access/a-function/al-date/datediff/

にありますように、DateDiff関数を使って年齢を出すSQLを書いてみました。

------------------------
SELECT T_顧客マスター.顧客名, T_顧客マスター.[フリガナ], T_顧客マスター.性別, T_顧客マスター.生年月日, DateDiff("yyyy",[生年月日],year(2019/06/06)) AS 年齢
FROM T_顧客マスター;
------------------------

するとこちら https://f.hatena.ne.jp/moon-fondu/20190928161008 にありますように、年齢がマイナスになって出てきてしまったのです。

Access VBA 入門講座 日付・時刻関数
http://accessvba.pc-users.net/function/date.html

を閲覧するに、年を入れるyearに、日付(2019/06/06)を入れておけば。
2019年が返り、生年月日のyearとの間隔で年齢を出してくれると思ったのですが。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2019/09/30 18:23:40
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:moon-fondu

------------------------

SELECT T_顧客マスター.顧客名, T_顧客マスター.[フリガナ], T_顧客マスター.性別, T_顧客マスター.生年月日, DateDiff("yyyy",[生年月日],date()) AS 年齢

FROM T_顧客マスター;

------------------------

と、終了日時の引数に「date()」と記載すると、正常な年齢結果 https://f.hatena.ne.jp/moon-fondu/20190928161013 が出てきたのですが。

なぜyearを用いたら年齢がマイナスになってしまったのか、その原因をお教えいただけますと幸いです。

よろしくお願いします<m(__)m>

ベストアンサー

id:ken3memo No.1

回答回数317ベストアンサー獲得回数115

ポイント700pt

Year(#2019/06/06#) みたいに、日付が固定値なら#シャープで囲うと正しく認識されるのでは?

日付の指定、Year関数に渡す時は
Year(#2019/06/06#)

#で囲うと思います

f:id:ken3memo:20190928162717j:image

vba 日付 # で検索すると
google:vba 日付 #

【VBA入門】日付を扱う方法(取得、書式変換、比較、計算、チェック)
https://www.sejuku.net/blog/36936
などが見つかるので、↑一読してみてください。

解決のヒントとなれば幸いです。

他1件のコメントを見る
id:ken3memo

DateDiff("yyyy",[生年月日],date())
で動くなら、Year(#2019/06/06#)の戻り値、2019の値では
DateDiff("yyyy",[生年月日],2019)
では動かなくて、日付型を渡さないといけないので、
普通に
SELECT T_顧客マスター.顧客名, T_顧客マスター.[フリガナ], T_顧客マスター.性別,
T_顧客マスター.生年月日, DateDiff("yyyy",[生年月日], #2019/06/06#) AS 年齢
FROM T_顧客マスター;

-------

DateDiff("yyyy",[生年月日], #2019/06/06#)
で試してみてください
間違っていたらスミマセン

2019/09/30 03:12:44
id:moon-fondu

すごいです、うまくいきました!
日付型の「#2019/06/06#」だとうまくいくんですね。
単位(カウントの基準)がyyyy(年)なので、開始日時の日付け([生年月日]カラム)同様、終了日時も形式を揃えないとうまくカウントしてくれないんですね。
勉強になりました。

ありがとうございました。

2019/09/30 18:23:22

その他の回答0件)

id:ken3memo No.1

回答回数317ベストアンサー獲得回数115ここでベストアンサー

ポイント700pt

Year(#2019/06/06#) みたいに、日付が固定値なら#シャープで囲うと正しく認識されるのでは?

日付の指定、Year関数に渡す時は
Year(#2019/06/06#)

#で囲うと思います

f:id:ken3memo:20190928162717j:image

vba 日付 # で検索すると
google:vba 日付 #

【VBA入門】日付を扱う方法(取得、書式変換、比較、計算、チェック)
https://www.sejuku.net/blog/36936
などが見つかるので、↑一読してみてください。

解決のヒントとなれば幸いです。

他1件のコメントを見る
id:ken3memo

DateDiff("yyyy",[生年月日],date())
で動くなら、Year(#2019/06/06#)の戻り値、2019の値では
DateDiff("yyyy",[生年月日],2019)
では動かなくて、日付型を渡さないといけないので、
普通に
SELECT T_顧客マスター.顧客名, T_顧客マスター.[フリガナ], T_顧客マスター.性別,
T_顧客マスター.生年月日, DateDiff("yyyy",[生年月日], #2019/06/06#) AS 年齢
FROM T_顧客マスター;

-------

DateDiff("yyyy",[生年月日], #2019/06/06#)
で試してみてください
間違っていたらスミマセン

2019/09/30 03:12:44
id:moon-fondu

すごいです、うまくいきました!
日付型の「#2019/06/06#」だとうまくいくんですね。
単位(カウントの基準)がyyyy(年)なので、開始日時の日付け([生年月日]カラム)同様、終了日時も形式を揃えないとうまくカウントしてくれないんですね。
勉強になりました。

ありがとうございました。

2019/09/30 18:23:22

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません