如何在 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小时内创建的所有产品?

如何在 Hybris 中创建新语言?

如何限制Hybris中的插入?

如何自定义 pcm 后台以过滤 Hybris 中的超类别搜索结果

如何使用 sql 查询使用注册日期列搜索网格视图

从hybris平台获取数据