H2 - Построить и выполнить запрос в Java для сравнения даты - PullRequest
1 голос
/ 27 сентября 2019

Я хочу создать таблицу, содержащую все записи другой таблицы, дата рождения которой <<определенной даты * </p>

Я пытался построить и выполнить этот запрос в моем приложении Java.

Дата сравнения (2016-12-31) является строкой, а дата рождения сохраняется как дата и время в базе данных H2.

CREATE TABLE table1 AS
SELECT *
FROM temp
WHERE FORMATDATETIME(BirthDate,'yyyy-MM-dd') < 2016-12-31
GROUP BY Cod, Id
ORDER BY Cod, BirthDate

Когда запрос выполняется, у меня появляется эта ошибка:

org.h2.jdbc.JdbcSQLException: Data conversion error converting "2016-12-31"; SQL statement:

1 Ответ

1 голос
/ 28 сентября 2019

Если BirthDate является значением даты или даты и времени, его не следует преобразовывать в значение строки символов для такого сравнения.Однако для некоторых операций сравнения вам может потребоваться преобразовать значение datetime в значение даты, в этом случае используйте CAST(datetime AS DATE).В вашем запросе это на самом деле не нужно.

Литерал даты не может быть записан как 2016-12-31, такое выражение означает числовое выражение с двумя вычитаниями.Литерал даты должен быть записан как DATE '2016-12-31'.

CREATE TABLE table1 AS
SELECT *
FROM temp
WHERE BirthDate < DATE '2016-12-31'
GROUP BY Cod, Id
ORDER BY Cod, BirthDate

Предложение GROUP BY в этом запросе также недопустимо.H2 не очень строг в этой области и может принять такой запрос , если в сгруппированных столбцах нет повторяющихся строк с одинаковыми значениями, но вы не должны полагаться на такое поведение.Негруппированные столбцы не могут быть выбраны, они могут быть только агрегированы. Если Id является первичным ключом , вы должны удалить это предложение как бесполезное.

CREATE TABLE table1 AS
SELECT *
FROM temp
WHERE BirthDate < DATE '2016-12-31'
ORDER BY Cod, BirthDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...