Какой тип вы должны хранить дату в базе данных? - PullRequest
1 голос
/ 06 июля 2011

В настоящее время я храню его в виде строки, но возникли проблемы с его использованием, когда речь идет о запросе по дате с помощью 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, Op: /, Справа: DyadicExpression {Literal {5} / Literal {11}}

Как выполнить поиск по дате?

1 Ответ

0 голосов
/ 06 июля 2011

Всегда как дата - база данных должна проверять типы данных, которые она хранит, таким образом, проверяя, соответствуют ли они данным. информация о том, какой тип известен на вставке, поэтому проверяйте ее тогда, а не позже, когда никто не знает, какое должно быть правильное значение.

ошибка, которую вы получаете, вероятно, не из-за этого, а потому, что дату в запросе нужно сделать датой, если типы правильные или если строка должна быть в виде строки в одинарных кавычках, см. Справочник по GQL например,

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

а какая дата 07.06.2011? Я думаю, что сегодня 6 июля, остальные 7 июня. Поэтому, даже если вы используете строки, используйте формат ISO 2011-07-06 Тип даты скрывает эту деталь, упрощая ее. Обратите внимание, что GQL использует только форму ISO, поэтому, даже если вы получите команду для указания даты в строке, произойдет сбой.

но лучше как

SELECT FROM SomeTable p WHERE date = DATE( 2011, 1, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...