Я работаю над приложением Metro для Windows 8, которое использует SQLite в качестве локальной базы данных.
Одна из таблиц в базе данных содержит столбец даты и времени. Я вижу неожиданные результаты при выполнении запросов, которые сортируют набор результатов по столбцу даты и времени — набор результатов не упорядочен так, как вы ожидаете.
Столбец datetime заполняется данными, сгенерированными приложением Metro на C#; например как DateTimeOffset.Now
. WinRT не поддерживает DateTime
, поэтому мы используем DateTimeOffset
.
Вы можете воспроизвести это в простой таблице:
CREATE TABLE "Foo" ("DateOfFoo" DATETIME)
Вот некоторые примеры данных, основанные на данных из нашего приложения (обратите внимание, что я нахожусь в часовом поясе PDT, то есть UTC -7):
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