- ベストアンサー
「アクセス数値」をyyyy/mm/dd(aaa)形式に変換する方法は?
- テーブルには、20121201aaaや20121203bbbといったデータがありますが、これをクエリで「あ2012/12/01(土)」や「あ2012/12/03(月)」の形式に変換する方法を教えてください。
- 数値の後ろの文字がさまざまなパターンがあるため、置換では対応できません。
- 現在、SELECT文とFormat関数を使用していますが、エラーが発生してしまいます。CDate関数を使用しても同じ結果です。適切な方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
先頭8文字を対象とする。 かつ、先頭8文字が日付と解釈できる。 の大前提がありますが(20121232 などの例外を非考慮) なら 最終的に、 [日]を日付時刻型としたい場合のSQL文は SELECT CDate(Format(Left([test],8),"@@@@\/@@\/@@")) AS 日 FROM テーブル1; として右クリックで現れるプロパティシートの書式で、yyyy/mm/dd(aaa) でしょうし [日]を単なるテキスト型なら、さらにFormatして SELECT Format(CDate(Format(Left([test],8),"@@@@\/@@\/@@")),"yyyy/mm/dd(aaa)") AS 日 FROM テーブル1; でプロパティシートの書式欄は空白にします。 前者は日付時刻型なので右詰めになりますし、後者はテキスト型なので左詰めになります。 "あ"と頭に加えるのなら テキスト型でしかできないので SELECT 'あ' & Format(CDate(Format(Left([test],8),"@@@@\/@@\/@@")),"yyyy/mm/dd(aaa)") AS 日 FROM テーブル1; でしょうか。 Left で8文字とって Format で日付時刻型と解釈できるようにして CDate で日付時刻型に変換 Format で日付時刻型になっているデータに「曜日」も加えた書式に変換 それに、あ を付加 ということです。
その他の回答 (5)
- nicotinism
- ベストアンサー率70% (1019/1452)
>日付型だと右詰でテキスト型だと左詰めになるのですか。 はい。 Accessに限らずExcelでもそうなるでしょ? 日付時刻型は内部的には倍精度浮動小数点型で保存されています。 なので数値の範疇です。
お礼
ありがとうございます。
- seastar3
- ベストアンサー率69% (99/142)
SQL文の7-8行目が1連に見えますね。 Weekday([日付],1) AS 曜日番号, Choose([曜日番号],"日","月","火","水","木","金","土") AS 曜日, 訂正すると Weekday([日付],1) AS 曜日番号, Choose([曜日番号],"日","月","火","水","木","金","土") AS 曜日, として、それぞれをクエリの列に納めて下さい。
お礼
ちゃんと動いてよかったです~ 無事デザインビューで見る事が出来ました。 再度ご回答ありがとうございます。
- seastar3
- ベストアンサー率69% (99/142)
ちゃんと動きましたか。よかった。 一行分をデザインビューの各列に納めるとできるはずです。改行が邪魔なのかも知れません。 例えば、 Mid([test],5,2) AS 月 は、 フィールド内では、 月:Mid([test],5,2) といった形で納めます。つまり、AS エイリアス(変数)を、エイリアス:式 と 言い換える必要があります。 左にあるエイリアスは、右側の列の関数で[ ]で囲んで使える訳です。
お礼
ありがとうございます。
- seastar3
- ベストアンサー率69% (99/142)
ちょっと長めになりましたが、以下のSQL文をクエリのSQLビューに入れてみて下さい。 SELECT [テーブル1].test, Left([test],4) AS 年, Mid([test],5,2) AS 月, Mid([test],7,2) AS 日, DateSerial([年],[月],[日]) AS 日付, Weekday([日付],1) AS 曜日番号, Choose([曜日番号],"日","月","火","水","木","金","土") AS 曜日, "あ" & [年] & "/" & [月] & [日] & "(" & [曜日] & ")" AS 編集文字列 FROM テーブル1; ---------------- まずクエリ内で先に作ったフィールドに名前を与えて、あとフィールドの関数に利用するのがコツです。 そうして、Weekday関数で曜日番号を求めて、Choose関数で漢字の曜日を求めます。 また、右端のaaaやbbbも区切って使いたければ、 Mid([test],5,Len[test]) AS 右端文字列 といったフィールドを用意して、最後の編集文字列の中に組み込みます。
お礼
すごい!できました! しかしこれにするとデザインビューでは開けなくなるのですね。
- bin-chan
- ベストアンサー率33% (1403/4213)
「必ず先頭8桁は日付になりうる数字である」という前提で。 わかりやすいよう改行いれますが、一行でペーストしてください。 SELECT Format( cdate( mid([テーブル1]![test], 1, 4)& "/" mid([テーブル1]![test], 5, 2)& "/" mid([テーブル1]![test], 7, 2) ) , "yyyy/mm/dd(aaa)") AS 日 FROM テーブル1 ;
お礼
「必ず先頭8桁は日付になりうる数字である」は絶対そうなります。 一行でペーストって SELECT Format(cdate(mid([テーブル1]![test], 1, 4)& "/"mid([テーブル1]![test], 5, 2)& "/"mid([テーブル1]![test], 7, 2)), "yyyy/mm/dd(aaa)") AS 日 FROM テーブル1 こういうことでしょうか? midの部分でエラーになってしまいました・・・
お礼
こちらの方が後から見直した時にわかりやすい式ですね。 日付型だと右詰でテキスト型だと左詰めになるのですか。