こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

クエリ、期限抽出。

アクセスで期限という数値型のデータがあります。
1109,909,912.。。。
これはそれぞれ、2011/09/31,2009/09/31,2009/12/31
という風に解釈するのですが。
この数値データを ○○○○/○○/○○という風に変換というか
抽出するクエリというか式のアドバイスお願いします。
自分では苦肉の策で
([期限]-Right([期限],2))*0.01+2000 & "/" & Right([期限],2)
というようなものを作ってみましたが、
これだと、2011/09,2009/09,2009/12となるだけでうまく、
日まではでてきません。
それともともと数値型のこのデータを日付/時刻型にできれば
日まででてくるのでしょうか?
ここできちんとした日付/時刻型に変換できるとものすごく
うれしいのですが。

投稿日時 - 2007-07-16 22:06:51

QNo.3173854

暇なときに回答ください

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

質問をちゃんと読んでなかったですね
月末日を求めるのであれば

DateSerial([期限]\100,([期限] Mod 100)+1,0)

投稿日時 - 2007-07-17 14:10:41

お礼

CHRONOS_0さん、こちらのレスもありがとうございました。
関数習得させていただきます。

投稿日時 - 2007-07-17 19:09:51

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

>DATEは対象の数値データが入っているフィールド名です。

は関係ありません。こちらのテストで「期限」フィールドを「DATE」という名前をつけただけです。

投稿日時 - 2007-07-17 11:17:15

ANo.3

2011/09/31,2009/09/31という日は存在しないので、2011/09/30,2009/09/30と考えると下記関数でできると思います。

DateSerial(Left([期限],Len([期限])-2),Val(Right([期限],2))+1,1)-1

DATEは対象の数値データが入っているフィールド名です。

投稿日時 - 2007-07-17 11:14:54

お礼

LenとRightはこういう風に使うんですね。ありがとうございました。勉強になります。

投稿日時 - 2007-07-17 19:11:04

ANo.2

日は1日で固定でよければ
DateSerial([期限]\100,[期限] Mod 100,1)

期限に空欄(Null)がある場合には
IIf(Not IsNull([期限]),DateSerial([期限]\100,[期限] Mod 100,1))

投稿日時 - 2007-07-17 11:02:40

[イミディエイト]
? YYYYMMDD(1109)
2011/09/30
? YYYYMMDD(909)
2009/09/30
? YYYYMMDD(912)
2009/12/31

このように、YYYYMMDD関数の類を作るのが一番手っ取り早いかも知れません。

[イミディエイト]
? GetDate("2007/10/15", 0, 1)
2007/10/01
? GetDate("2007/10/15", +1, 1)
2007/11/01
? GetDate("2007/10/15", -1, 1)
2007/09/01
? GetDate("2007/10/15", 0, 99)
2007/10/31
? GetDate("2007/10/15", +1, 99)
2007/11/30
? GetDate("2007/10/15", -1, 99)
2007/09/30
? GetDate("2007/10/15", -1, 25)
2007/09/25

このような、当月、前月、来月の初日、末日、指定日等を求める関数を使うと容易です。

Public Function YYYYMMDD(ByVal Suji As Integer) As Date
  Dim YY As Integer
  Dim MM As Integer
  
  YY = Suji \ 100 + 2000
  MM = Suji Mod 100
  YYYYMMDD = GetDate(CDate(YY & "/" & MM & "/01"), 0, 99)
End Function

Public Function GetDate(ByVal Now As Date, _
            ByVal Move As Integer, _
            ByVal Hiduke As Integer) As Date
            
  GetDate = DateSerial(DatePart("yyyy", Now), _
             DatePart("m", Now) + Move - (Hiduke = 99), _
             Hiduke * Abs(Hiduke <> 99))
End Functio

なお、[来月の初日の前日=当月の末日]という計算をしています。

投稿日時 - 2007-07-17 08:23:32

お礼

Husky2007さん、ここの域までに自分はまだ達していませんが、これがきちんと理解できるようにはやくなりたいものです、ありがとうございました。

投稿日時 - 2007-07-17 19:12:28

あなたにオススメの質問