ORMLite 查询日期格式问题

prs*_*prs 2 sqlite date-format ormlite

我想将 sqlite 查询转换为 Ormlite 查询。

SELECT * FROM Test where strftime('%m-%Y',Date)='11-2001'
Run Code Online (Sandbox Code Playgroud)

我无法像上面的查询那样格式化日期列。

如何将 Ormlite 中的日期列格式化为MM-yyyy?谢谢。

Gra*_*ray 5

如果这是您要使用的确切 SQL,那么您可以使用以下Where.raw(...)方法:

QueryBuilder<Test, Integer> qb = testDao.queryBuilder();
qb.where().raw("strftime('%m-%Y',Date) = '11-2001'");
List<Test> results = qb.query();
Run Code Online (Sandbox Code Playgroud)

但是,这似乎仅在日期字段存储为DATE_STRING类型时才有效:

@DatabaseField(dataType = DataType.DATE_STRING)
Date date;
Run Code Online (Sandbox Code Playgroud)

问题是默认情况下,Xerial JDBC 驱动程序以以下格式存储日期:

2012-07-19 09:58:18.36
Run Code Online (Sandbox Code Playgroud)

哪个 [完全] 不匹配批准的 Sqlite 格式之一,这些格式是:

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH:MM
  3. YYYY-MM-DD HH:MM:SS
  4. YYYY-MM-DD HH:MM:SS.SSS
  5. YYYY-MM-DDTHH:MM
  6. YYYY-MM-DDTHH:MM:SS
  7. YYYY-MM-DDTHH:MM:SS.SSS
  8. 时:分
  9. 时:分:秒
  10. 时:分:SS.SSS
  11. 现在
  12. DDDDDDDDDD

当您将其更改为DataType.DATE_STRINGthen 时,它将存储为以下似乎有效的内容:

2012-07-19 10:03:49.000991
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅有关日期函数的 Sqlite 文档。不幸的是,文档并没有完全解释数据库值需要采用某种格式:

http://www.sqlite.org/lang_datefunc.html