• ベストアンサー

クエリ、期限抽出。

アクセスで期限という数値型のデータがあります。 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となるだけでうまく、 日まではでてきません。 それともともと数値型のこのデータを日付/時刻型にできれば 日まででてくるのでしょうか? ここできちんとした日付/時刻型に変換できるとものすごく うれしいのですが。

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.5

質問をちゃんと読んでなかったですね 月末日を求めるのであれば DateSerial([期限]\100,([期限] Mod 100)+1,0)

9nainai9
質問者

お礼

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

その他の回答 (4)

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.4

>DATEは対象の数値データが入っているフィールド名です。 は関係ありません。こちらのテストで「期限」フィールドを「DATE」という名前をつけただけです。

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.3

2011/09/31,2009/09/31という日は存在しないので、2011/09/30,2009/09/30と考えると下記関数でできると思います。 DateSerial(Left([期限],Len([期限])-2),Val(Right([期限],2))+1,1)-1 DATEは対象の数値データが入っているフィールド名です。

9nainai9
質問者

お礼

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

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

日は1日で固定でよければ DateSerial([期限]\100,[期限] Mod 100,1) 期限に空欄(Null)がある場合には IIf(Not IsNull([期限]),DateSerial([期限]\100,[期限] Mod 100,1))

noname#140971
noname#140971
回答No.1

[イミディエイト] ? 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 なお、[来月の初日の前日=当月の末日]という計算をしています。

9nainai9
質問者

お礼

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