如何在 Hybris 灵活搜索查询中使用日期?
Posted
技术标签:
【中文标题】如何在 Hybris 灵活搜索查询中使用日期?【英文标题】:How to use Date in Hybris Flexible Search Query? 【发布时间】:2017-09-14 04:21:12 【问题描述】:我正在尝试使用基于日期的灵活搜索查询从 hybris 中获取记录。我试图找到一些相同的资源,但没有成功。
基本上,我正在尝试查找修改日期等于当前日期的产品。
我目前的查询是:
Select * from product as p where to_char(p.modifiedDate,'dd/mm/yyyy')==to_char('18/04/2017','dd/mm/yyyy')
这是我当前的查询。 但是,当我使用 HAC 运行它时,它给了我错误:
xception message: ORA-00936: missing expression
Exception stacktrace:
oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017) oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655) oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249) oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566) oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215) oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58) oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:776) oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:897)
谁能帮我解决这个问题?
【问题讨论】:
【参考方案1】:正如 alain.janinm 所说的
修改时间而不是修改日期
= 而不是 ==
我猜你不需要第二个 to_char,因为它已经是 char。
这里是 Oracle 和 mysql 示例的官方文档:
v5:FlexibleSearch Tips and Tricks v6:FlexibleSearch Tips and Tricks【讨论】:
感谢@doom123。还有一件事。我可以在查询中使用当前日期进行比较吗? @AppleBud Oracle 拥有当前日期时间的 SYSDATE (docs.oracle.com/cd/B19306_01/server.102/b14200/functions172.htm)。 MySQL 有 NOW()、CURDATE()。没有要测试的 Oracle,但可以使用 MySQL。或者,如果您从代码运行查询,那么您可以直接在代码中形成日期字符串以将其插入到查询中。请记住,hybris 服务器和 DB 服务器可能有不同的时区。所以 DB SYSDATE 不能提供你的 hybris 服务器想要的东西。 @doom123 - 我从日志中的 flex 查询中复制了生成的 SQL,并在 HAC 中运行它看起来不错,但在运行时却不行。知道为什么会出现这种差异吗?【参考方案2】:有两个问题:
你使用==
来测试相等性,使用一个就足够了。
您使用p.modifiedDate
,但该字段称为modifiedtime
。
最后一次 to_char 调用没有用。
不幸的是,我可以使用 Orale Db 进行测试,但灵活搜索应该如下所示:
SELECT * from Product as p where to_char(p.modifiedTime,'dd/mm/yyyy')='18/04/2017'
【讨论】:
感谢@alain.janinm。您能帮忙解决如何在其中使用 sysdate 而不是指定硬编码日期吗?【参考方案3】:请尝试此查询,因为它可以让我获取两个日期之间的数据:
Select paymentdate from PaymentTransaction where (paymentdate >= '2020/01/01 00:00:01' AND paymentdate <= '2021/01/01 00:00:01')
【讨论】:
【参考方案4】:请尝试以下解决方案:
p.modifiedTime BETWEEN TO_DATE('18/04/2017 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('18/04/2017 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
【讨论】:
日期字符串和日期模式不匹配,你测试过吗?以上是关于如何在 Hybris 灵活搜索查询中使用日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何在hybris中使用灵活查询获取H小时内创建的所有产品?