gpt4 book ai didi

java - 无法查询特定范围内的日期条件

转载 作者:行者123 更新时间:2023-12-01 14:37:01 25 4
gpt4 key购买 nike

我想从HSQL数据库中获取记录,查询如下:

ao.find(Issueda.class, Query.select().where("user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>=     TO_DATE(?,'yyyy/MM/dd') AND TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')",user,parsedDate,parsedDate))

现在,它给我一个错误,“To_DATE”不是有效的关键字,如下所示:

at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: Unexpected token: TO_DATE in statement [SELECT * FROM
PUBLIC.AO_0371A8_ISSUE_da WHERE user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>= TO_DATE(?,'yyyy/MM/dd') AND TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')]

如果我删除“To_date”,那么即使数据库中存在数据,我也无法从数据中获取正确的结果数据,并且仅返回 null。数据库中日期字段值的格式为“2013-05-15 00:00:00.000000000”

任何人都可以与我分享查询数据库的任何替代方法吗?

最佳答案

此查询不需要 TO_DATE。 TO_DATE 用于转换字符串格式的日期。

从您的评论来看,您似乎希望一个参数位于两个日期之间或两个日期之外。

此类查询的正确 SQL 如下:

这将返回开始和结束之间的日期,包括:

WHERE USER=? AND ? BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE)

这将返回开始和结束之外的日期:

WHERE USER=? AND ? NOT BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE)

对于上述查询,您使用带有 PreparedStatement.setDate(colIndex) 的 java.sql.Data 对象

现在,如果您要比较的日期是“2013/05/20”等格式的字符串,那么您需要 TO_DATE(?,'yyyy/MM/dd') 而不是参数。如果日期是标准格式的字符串,例如“2013-05-20”,那么您可以使用 CAST(? AS DATE) 代替参数。

我假设您的数据库表列 START_TIME 和 END_TIME 定义为 TIMESTAMP 类型,但它应该适用于 VARCHAR(N) 或 CHAR(N) 类型。

关于java - 无法查询特定范围内的日期条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com