dポイントプレゼントキャンペーン実施中!

アクセス2002

クエリにて下記2つの抽出方法を教えて下さい。

【抽出条件1】
出生時~小学校就学前(6歳に達した最初の3月31日まで)

【抽出条件2】
小学生~中学生
(4月1日時点で6歳以上)
(15歳に達した最初の3月31日まで)

[Q_顧客]というクエリを作っています。

5つのフィールドがあります。
氏名・年号・生年・月・日

氏名・年号はテキスト型
生年・月・日は数値型

氏名 年号 生年 月 日
花子 昭和 46 1 15
太郎 平成 15 3 13
春子 平成 17 1 11
次郎 平成 14 6 23
夏子 平成 18 4 29
秋子 平成  9 7 12

上記のクエリから、
・出生時~小学校就学前
・小学生~中学生
の2つを抽出したいのですが、どのようにしたら良いか教えて下さい。

日付型で作成してなく、年齢の出し方も分かりません。
データ数も多いので、困っています。
よろしくお願い致します。

A 回答 (2件)

質問は



>日付型で作成してなく、年齢の出し方も分かりません。

ということでよろしいでしょうか?

まず、下記の列を追加します。これは生年月日をまとめて西暦になおしたものです。

生年月日:Format([年号] & [生年] & "年" & [月] & "月" & [日] & "日", "yyyy/mm/dd")

次に、下記の列を追加します。
これは、「年齢計算に関する法律」によって誕生日の前日に満年齢に達することになっているためで、学校教育法の第22条の就学の基準では「子女の満六才に達した日の翌日以降における最初の学年の初から」となっているためです。もし、この年齢ではなく、当日に満年齢になる計算をお望みの場合は、「Date()」だけに修正すればよいです。(基準日がわからないので、動かした当日にしています)

基準日:DateAdd("d",+1,Date())

最後に、下記の列を追加します。

年齢:IIf(Format(生年月日,"mm/dd")>Format(基準日,"mm/dd"), DateDiff("yyyy",生年月日,基準日)-1, DateDiff("yyyy",生年月日,基準日))

上記で年齢の出し方は大体分かるかと思います。
あとは年齢をもとに条件にあう列を追加していくことになるか、上記の年齢計算自体を修正するかになると思います。
    • good
    • 0
この回答へのお礼

hogya 様

回答をありがとうございます。
下記で解決しました。

【抽出1】

SELECT * FROM 顧客
WHERE DateValue([年号] & [生年] & "/" & [月] & "/" & [日])
BETWEEN DateSerial(Year(Date()) -15, 4, 2)
AND DateSerial(Year(Date()) -6, 4, 1);

【抽出2】

SELECT * FROM 顧客
WHERE DateValue([年号] & [生年] & "/" & [月] & "/" & [日]) > DateSerial(Year(Date()) -6, 4, 1);

SELECT * FROM Q_患者マスターレセプトNEW吉野_南関町ダミー入力
WHERE DateValue([年号] & [生年] & "/" & [月] & "/" & [日])
BETWEEN DateSerial(Year(Date()) -15, 4, 2)
AND DateSerial(Year(Date()) -6, 4, 1);

お礼日時:2012/06/30 12:46

内部で年齢を計算する関数つくると思います。

僕なら。
その結果を比較する。
そういうことでいかがでしょう?

この回答への補足

groovyrealityx 様

回答ありがとうございます。

日付型に変換の方法を調べたのですがわかりませんでした。
また、小学校就学前(6歳に達した最初の3月31日まで)なども分かりません。

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

補足日時:2012/06/29 19:21
    • good
    • 0
この回答へのお礼

groovyrealityx 様

回答をありがとうございます。
解決しました。

お礼日時:2012/06/30 12:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す