アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセスで作成したmdbファイルで並び替えているフィールドがあるのですが、抽出がうまくいきません。
テキスト型のフィールドに日次+時刻(mmddhhmm)が入っているフィールドがあります。
1分毎のレコードを作成しています。

03200900
03200901
03200902
...
03201200
...
03202300
..
03200000
03200001
...
03200858
03200859

先頭が当日の9時で最終レコードが翌日の8時59分になっています。
0時を回って日付が変わっても、同一日扱いとしており、mmddの部分は変化しません。

このフィールドから例えば03202000~03200859のデータを抜き出そうとクエリを実行しているのですが、並び替えているせいかおかしな値が抽出されます。


SELECT テーブル名.フィールド名
FROM テーブル名
WHERE (((テーブル名.フィールド名) Between "03202000" And "03200859"));

上記の条件式で抽出しようとすると、何故かBetweenで選択した時間"以外"を抽出してしまいます。
並び替えたフィールドから正確に抽出するのは無理なのでしょうか?

A 回答 (2件)

>0時を回って日付が変わっても、同一日扱いとしており、mmddの部分は変化しません


だからでしょうね。
03200900 は 03200859 よりも大です。
03200859 は翌日のデータなので、03200900 よりも大きく扱えるようにする必要があります。
でないとソートや抽出はおかしな結果になります。

データは現状のままとすると、元日時の修正をします。
クエリのデザイングリッドに
元日時|元日時修正:IIf(Right([元日時],4)<'0900',Format(Val(Left([元日時],4))+1,"0000") & Right([元日時],4),[元日時])

として、0900 未満の場合は翌日にします。
クエリの抽出には
Between '03202300' And '03210010' のように修正した値で。
    • good
    • 0
この回答へのお礼

ありがとうございます、お陰で無事抽出出来ました。

お礼日時:2015/03/22 20:23

> 日次+時刻(mmddhhmm)



日次+時刻(mmddhhnn)
ですね

BETWEEN は、範囲を指定するものなので、

BETWEEN 小 AND 大
BETWEEN 大 AND 小

でも同じ結果になったと思います。

03202000~03200859 のデータが欲しいので、
その期間じゃない Not を頭に付けて

Not フィールド Between "03201959" And "03200900"

で良いと思います。
無理に BETWEEN を使わなければ

フィールド<'03200900' Or フィールド>='03202000'

でも良さそうです。
昇順表示にするのなら

ORDER BY Right(フィールド,4)>='2000', フィールド

を追加指定すれば良さそうです。
    • good
    • 0
この回答へのお礼

そういえばNotを使えば問題ないことを思いつきませんでした
ありがとうございます

お礼日時:2015/03/22 20:24

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