我有以下代码:
[Test]
public void SqliteTest()
{
var insertQuery = @"insert into MetricData (Date) Values (@date)";
var selectQuery = @"select strftime('%Y',Date) as 'year', Date from MetricData";
var connectionString = "Data Source=:memory:;Version=3;DateTimeFormat=Ticks;";
using (var db = new SQLiteConnection(connectionString))
{
db.Open();
DatabaseSchemaBuilder.InitializeSchema(db);
var testDate = DateTime.Now;
using (var cmd = new SQLiteCommand(insertQuery, db))
{
cmd.Parameters.AddWithValue("@date", testDate);
cmd.ExecuteNonQuery();
}
using (var cmd = new SQLiteCommand(selectQuery, db))
{
using (var reader = cmd.ExecuteReader())
{
reader.Read();
var queriedDate = reader.GetDateTime(1);
var year = reader.GetString(0);
Assert.AreEqual(testDate, queriedDate);
Assert.AreEqual("2013", year);
}
}
}
}
当我运行此代码时,第一个断言通过但第二个断言失败,年份等于 1968(其他格式值也不正确,例如月份返回为 19)。
查看原始查询输出时,年份结果为1968
,日期为635120225608999130
。
为什么strftime()
在这种情况下无法正常工作?
编辑:
只是添加,我定义为的日期列Date integer
。此外,如果我不包含DateTimeFormat=Ticks
在连接字符串中,则所有断言都会通过。