我正在开发一个使用 SQLite 作为其本地数据库的 Windows 8 Metro 应用程序。
数据库中的一张表包含一个日期时间列。在运行按 datetime 列对结果集进行排序的查询时,我看到了意外的结果——结果集的排序与您期望的不同。
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