「一気に最後まで読んだ」本、教えて下さい!

wonddows2000,Access2000 VBAで勤怠管理をしたいのですが日付に関するSQL分でDATEDIFFの使い方が今ひとつわかりません。

SELECT * ,DATEDIFF(day,入室日,退室日)  FROM TABLE WHERE 部署コード=700 

WHERE後部分はどう表現したらいいでしょうか。



検査条件(1)
入室日(YYYY/MM/DD)=退室日(YYYY/MM/DD) 且つ入室時間(hh:mm:ss)が09:00:00より後且つ
入室日(YYYY/MM/DD)=退室日(YYYY/MM/DD)+1 且つ退室時間(hh:mm:ss)が09:00:00より前且つ
部署コードが700に対応するテーブルの全データを出力

検査条件(2)上記以外の全データ


TABLE

(文字型)  (文字型) (日付型) (日付型) (日付型) (日付型)
部署コード | 氏名  | 入室日  |入室時間 | 退室日  | 退室時間 |
1000 A 2000/12/01 8:16:30 2000/12/01 18:10:20
2000 B 2000/12/02 8:16:30 2000/12/03 8:10:20
700 C 2000/12/03 9:16:30 2000/12/03 18:10:20
3000 A 2000/12/04 8:16:30 2000/12/01 18:10:20
700 D 2000/12/04 8:16:30 2000/12/05 8:10:20
700 E 2000/12/04 8:16:30 2000/12/04 18:10:20

結果(1)

700 C 2000/12/03 9:16:30 2000/12/03 18:10:20
700 D 2000/12/04 8:16:30 2000/12/05 8:10:20

結果(2)
1000 A 2000/12/01 8:16:30 2000/12/01 18:10:20
2000 B 2000/12/02 8:16:30 2000/12/03 8:10:20
3000 A 2000/12/04 8:16:30 2000/12/01 18:10:20
700 E 2000/12/04 8:16:30 2000/12/04 18:10:20

A 回答 (1件)

>入室日(YYYY/MM/DD)=退室日(YYYY/MM/DD) 且つ入室時間(hh:mm:ss)が09:00:00より後且つ


>入室日(YYYY/MM/DD)=退室日(YYYY/MM/DD)+1 且つ退室時間(hh:mm:ss)が09:00:00
この2つは且つ(AND)じゃなくまたは(OR)でないと何もヒットしませんよ

SELECT obone.* , DateDiff("d",[入室日],[退室日]) AS 式1
FROM obone
WHERE
(((obone.部署コード)=700)
AND ((obone.入室日)=[退室日])
AND ((obone.入室時間)>=#12/30/1899 9:0:0#))
OR
(((obone.部署コード)=700)
AND ((obone.退室日)=[入室日]+1)
AND ((obone.退室時間)<=#12/30/1899 9:0:0#));

条件(2)のこれ以外はWhere条件にnotを付けるだけです

SELECT obone.*, DateDiff("d",[入室日],[退室日]) AS 式1
FROM obone
WHERE not (
(((obone.部署コード)=700)
AND ((obone.入室日)=[退室日])
AND ((obone.入室時間)>=#12/30/1899 9:0:0#))
OR
(((obone.部署コード)=700)
AND ((obone.退室日)=[入室日]+1)
AND ((obone.退室時間)<=#12/30/1899 9:0:0#))
);
    • good
    • 0
この回答へのお礼

ありがとうございました。
勉強不足でした。

お礼日時:2006/02/22 09:47

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

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


おすすめ情報