您应该将日期存储在数据库中的哪种类型?

时间:2011-07-06 09:30:58

标签: date types gql

目前我将它存储为String,但在使用GQL按日期查询时遇到问题。

Date date = Calendar.getInstance().getTime();
DateFormat formatter = new SimpleDateFormat("hh:mm:ss, z");
String todayDate = formatter.format(date);

查询:

"SELECT FROM SomeTable p WHERE date = 01/01/2011"

错误: 例外:

  

org.datanucleus.store.appengine.query.DatastoreQuery $ UnsupportedDatastoreFeatureException:   查询问题:表达的右侧是   由不受支持的组件组成。   剩下:   org.datanucleus.query.expression.Literal,   操作:/,对:   DyadicExpression {Literal {5} /   字面{11}}

如何按日期搜索?

1 个答案:

答案 0 :(得分:0)

始终作为日期 - 数据库应检查其存储的数据类型,从而确保数据符合其说明的内容。有关插入物上已知类型的信息,请检查它,而不是在没有任何人知道正确值应该是什么的时候进行检查。

您获得的错误可能不是由于此而是因为如果类型正确或者字符串需要作为单引号字符串,则查询中的日期需要为日期,请参阅GQL Reference e.g。

"SELECT FROM SomeTable p WHERE date = '01/01/2011'"

但是什么日期是06/07/2011?我想今天是7月6日,其他是6月7日。因此,即使您使用字符串,也请使用ISO格式2011-07-06日期类型将隐藏此详细信息,使其更容易。请注意,GQL仅使用ISO表单,因此即使您获得了将日期包含在字符串中的命令,它也会失败。

但更好

SELECT FROM SomeTable p WHERE date = DATE( 2011, 1, 1)