プロが教える店舗&オフィスのセキュリティ対策術

テーブルに
20121201aaa
20121203bbb
と言うデータがあるのですが
これをクエリで
あ2012/12/01(土)
あ2012/12/03(月)
に変えるにはどうすればいいでしょうか

数値の後ろの文字はいろんなパターンがあるので置換じゃ追いつきません。

SELECT Format(Left([テーブル1]![test],8),"yyyy/mm/dd(aaa)") AS 日
FROM テーブル1;
にすると#エラーになってしまいます。

SELECT Format(CDate(Left([テーブル1]![test],8)),"yyyy/mm/dd(aaa)") AS 日
FROM テーブル1;
これでもダメでした・・・

「アクセス 数値+日付をyyyy/mm/d」の質問画像

A 回答 (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 で日付時刻型になっているデータに「曜日」も加えた書式に変換
それに、あ を付加
ということです。
    • good
    • 0
この回答へのお礼

こちらの方が後から見直した時にわかりやすい式ですね。
日付型だと右詰でテキスト型だと左詰めになるのですか。

お礼日時:2013/01/08 22:15

>日付型だと右詰でテキスト型だと左詰めになるのですか。


はい。
Accessに限らずExcelでもそうなるでしょ?
日付時刻型は内部的には倍精度浮動小数点型で保存されています。
なので数値の範疇です。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/01/14 16:10

SQL文の7-8行目が1連に見えますね。



Weekday([日付],1) AS 曜日番号, Choose([曜日番号],"日","月","火","水","木","金","土") AS 曜日,

訂正すると

Weekday([日付],1) AS 曜日番号,
Choose([曜日番号],"日","月","火","水","木","金","土") AS 曜日,

として、それぞれをクエリの列に納めて下さい。
    • good
    • 0
この回答へのお礼

ちゃんと動いてよかったです~
無事デザインビューで見る事が出来ました。
再度ご回答ありがとうございます。

お礼日時:2013/01/08 22:15

ちゃんと動きましたか。

よかった。
一行分をデザインビューの各列に納めるとできるはずです。改行が邪魔なのかも知れません。
例えば、 Mid([test],5,2) AS 月 は、
フィールド内では、 月:Mid([test],5,2)
といった形で納めます。つまり、AS エイリアス(変数)を、エイリアス:式 と
言い換える必要があります。
左にあるエイリアスは、右側の列の関数で[ ]で囲んで使える訳です。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/01/14 16:10

ちょっと長めになりましたが、以下の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 右端文字列
といったフィールドを用意して、最後の編集文字列の中に組み込みます。
    • good
    • 0
この回答へのお礼

すごい!できました!
しかしこれにするとデザインビューでは開けなくなるのですね。

お礼日時:2013/01/07 22:57

「必ず先頭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
;
    • good
    • 0
この回答へのお礼

「必ず先頭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の部分でエラーになってしまいました・・・

お礼日時:2013/01/07 22:56

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