【问题标题】:How to use Date in Hybris Flexible Search Query?如何在 Hybris 灵活搜索查询中使用日期?
【发布时间】: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) 

谁能帮我解决这个问题?

【问题讨论】:

    标签: java hybris


    【解决方案1】:

    正如 alain.janinm 所说的

    1. 修改时间而不是修改日期

    2. = 而不是 ==

    3. 我猜你不需要第二个 to_char,因为它已经是 char。

    这里是 Oracle 和 MySQL 示例的官方文档:

    【讨论】:

    • 感谢@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')
      

      【讨论】:

      • 日期字符串和日期模式不匹配,你测试过吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2018-09-20
      相关资源
      最近更新 更多