Если 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