慕運維8079593
2023-09-06 15:56:34
我想創(chuàng)建一個表,其中包含另一個表的所有記錄,其出生日期是<某個日期我嘗試在我的 Java 應用程序中構建并執(zhí)行此查詢。比較日期 (2016-12-31) 是一個字符串,出生日期在 H2 數據庫中存儲為日期時間。CREATE TABLE table1 ASSELECT *FROM tempWHERE FORMATDATETIME(BirthDate,'yyyy-MM-dd') < 2016-12-31GROUP BY Cod, IdORDER BY Cod, BirthDate當執(zhí)行查詢時,我收到此錯誤:org.h2.jdbc.JdbcSQLException: Data conversion error converting "2016-12-31"; SQL statement:
1 回答

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
如果BirthDate是日期或日期時間值,則不應將其轉換為字符串值以進行此類比較。但是,對于某些比較操作,您可能需要將日期時間值轉換為日期值,在這種情況下請使用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
添加回答
舉報
0/150
提交
取消