1

スクローラーによって選択されたUNIXタイムスタンプに基づいてSQLiteデータベースからレコードをプルしようとしています。各レコードにはタイムスタンプと期間があるため、選択したタイムスタンプが開始時刻の後、開始時刻と期間の後にある場合は、選択する必要があります。

私はクエリを作成しました。これは動作するはずであるだけでなく、XCodeに付属しているSQLiteを使用していないSQLiteクライアントでも動作します。

SELECT * FROM `booking` WHERE '1304168400' BETWEEN `stamp` AND (`stamp`+(`duration`*60))

これが私の質問です。タイムスタンプは選択されたタイムスタンプであり、スタンプフィールドはレコードのタイムスタンプであり、期間は予約の長さ(分単位)です。

私が持っているクライアントを使用してこれが機能することがわかる唯一の理由は、SQLiteのバージョンが異なり、BETWEENコマンドがサポートされていないか、同じ方法でサポートされていないことです。

アドバイスや助けをいただければ幸いです。ありがとう!

4

1 に答える 1

2

これは、SQLiteクエリがSQLiteに到達したときにどのように見えるかを示しています。(リテラルタイムスタンプの前後に引用符はなく、バッククォートもありません。)SQLiteでデータベースを開いてこのクエリを実行できる場合は、この構文が機能するはずです。

sqlite> SELECT *
        FROM booking
        WHERE 1304168400 BETWEEN stamp and (stamp + (duration * 60));

バッククォートではなく、二重引用符で識別子を保護します。

sqlite> SELECT *
        FROM "booking"
        WHERE 1304168400 BETWEEN "stamp" and ("stamp" + ("duration" * 60));

このクエリによって、実行されているSQLiteのバージョンを判別できます。

sqlite> select sqlite_version();
于 2011-05-04T01:04:14.597 に答える