SQLite をローカル データベースとして使用する Windows 8 Metro アプリケーションに取り組んでいます。
データベース内のテーブルの 1 つに日時列が含まれています。結果セットを datetime 列で並べ替えるクエリを実行すると、予期しない結果が表示されます。結果セットが期待どおりに並べ替えられていません。
datetime 列には、C# の Metro アプリケーションによって生成されたデータが入力されます。たとえばDateTimeOffset.Now
、WinRT は をサポートしていないためDateTime
、 を使用していますDateTimeOffset
。
これを単純なテーブルで複製できます。
CREATE TABLE "Foo" ("DateOfFoo" DATETIME)
以下は、アプリケーションからのデータに基づくサンプル データです (UTC -7 である PDT タイムゾーンにいることに注意してください)。
INSERT INTO "main"."Foo" ("DateOfFoo") VALUES (?1)
Parameters:
param 1 (text): 9/18/2012 8:08:56 AM -07:00
INSERT INTO "main"."Foo" ("DateOfFoo") VALUES (?1)
Parameters:
param 1 (text): 9/18/2012 8:13:42 AM -07:00
INSERT INTO "main"."Foo" ("DateOfFoo") VALUES (?1)
Parameters:
param 1 (text): 9/18/2012 12:46:36 PM -07:00
次のような単純なクエリ:
Select * From Foo Order By DateOfFoo
次の結果セットを返します。
9/18/2012 12:46:36 PM -07:00
9/18/2012 8:08:56 AM -07:00
9/18/2012 8:13:42 AM -07:00
私が期待するとき:
9/18/2012 8:08:56 AM -07:00
9/18/2012 8:13:42 AM -07:00
9/18/2012 12:46:36 PM -07:00
そしてSelect * From Foo Order By DateOfFoo DESC
戻ります:
9/18/2012 8:13:42 AM -07:00
9/18/2012 8:08:56 AM -07:00
9/18/2012 12:46:36 PM -07:00
私が期待するとき:
9/18/2012 12:46:36 PM -07:00
9/18/2012 8:13:42 AM -07:00
9/18/2012 8:08:56 AM -07:00
CDT タイムゾーンの同僚は、この問題を再現できませんでした。マシンのタイム ゾーンを CDT に変更し、アプリケーション データを入力したところ、クエリによって結果セットが正しく並べ替えられたことを確認できました。
9/18/2012 2:46:36 PM -05:00
9/18/2012 10:13:42 AM -05:00
9/18/2012 10:08:56 AM -05:00