2017-04-18 102 views
2

我正在尝试使用基于日期的灵活搜索查询从hybris中读取记录。我试图找到一些相同的资源,但都没有解决。如何在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) 

谁能帮我这个?

回答

2

这里有两个问题:

您使用==测试平等,使用一个就够了。

您使用p.modifiedDate但该字段被称为modifiedtime

最后的to_char调用是无用的。

不幸的是,我可以用ORALE Db的测试,但灵活的搜索应该是这样的:

SELECT * from {Product as p} where to_char({p.modifiedTime},'dd/mm/yyyy')='18/04/2017' 
+0

感谢@ alain.janinm。你能帮助如何使用sysdate,而不是指定硬编码的日期吗? – AppleBud

4

正如alain.janinm说

  1. modifiedtime而不是modifiedDate

  2. =代替的==

  3. 我猜你不会n第二个to_char因为它已经是char了。

下面是与Oracle和MySQL实例官方文档:

+0

谢谢@ doom123。还有一件事。我可以在查询中使用当前日期进行比较吗? – AppleBud

+0

@ AppleBud 对于当前日期时间,Oracle具有SYSDATE(https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions172.htm)。 MySQL有NOW(),CURDATE()。没有Oracle来测试,但是它有MySQL的工作。或者,如果您从代码运行查询,则可以直接在代码中形成日期字符串以将其插入到查询中。请记住,hybris服务器和数据库服务器可能有不同的时区。因此DB SYSDATE不能提供您的hybris服务器所需的内容。 – onetuser

+0

@ doom123 - 我从日志中的flex查询中复制了SQL gen'd,并在HAC中运行它看起来很好,但不是在运行时。任何想法为什么这种差异? – killjoy