人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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との間隔で年齢を出してくれると思ったのですが。

●質問者: moon-fondu
●カテゴリ:インターネット 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

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

と、終了日時の引数に「date()」と記載すると、正常な年齢結果 https://f.hatena.ne.jp/moon-fondu/20190928161013 が出てきたのですが。
なぜyearを用いたら年齢がマイナスになってしまったのか、その原因をお教えいただけますと幸いです。
よろしくお願いします<m(__)m>


1 ● ken3memo
●700ポイント ベストアンサー

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

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

#で囲うと思います

f:id:ken3memo:20190928162717j:image

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

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

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


moon-fonduさんのコメント
ken3memoさんありがとうございます。 さっそく「Year(#2019/06/06#) 」に直しまして、クエリを実行してみました。 ----------------------------- SELECT T_顧客マスター.顧客名, T_顧客マスター.[フリガナ], T_顧客マスター.性別, T_顧客マスター.生年月日, DateDiff("yyyy",[生年月日],year(#2019/06/06#)) AS 年齢 FROM T_顧客マスター; ----------------------------- しかしやはり…年齢がマイナスになって、出てきてしまいます。https://f.hatena.ne.jp/moon-fondu/20190928161008 また、クエリツールを利用しているときは、VBAを使ってないので「表示」タブが出てこず、イミディエイトウィンドウも確認できずです。https://f.hatena.ne.jp/moon-fondu/20190929204038 year関数を用い、生年月日カラムのデータを参照して、その差を年齢として出すことは出来ないのでしょうか。 よろしくお願いします。

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#) で試してみてください 間違っていたらスミマセン

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ