2017-04-18 4 views
2

Ich versuche, Datensätze von hybris mithilfe der flexiblen Suchanfrage basierend auf dem Datum abzurufen. Ich habe versucht, einige Ressourcen für das gleiche zu finden, aber keine hat geklappt.Wie verwende ich das Datum in Hybris Flexible Suchanfrage?

Grundsätzlich versuche ich Produkte zu finden, deren Änderungsdatum dem aktuellen Datum entspricht.

Meine aktuelle Abfrage ist:

Select * from {product as p} where to_char({p.modifiedDate},'dd/mm/yyyy')==to_char('18/04/2017','dd/mm/yyyy') 

Das ist meine aktuelle Abfrage ist. Allerdings, wenn ich dies mit HAC laufen, gib es mir eine Fehlermeldung:

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) 

Kann mir jemand auf diese helfen?

Antwort

2

Es gibt zwei Probleme:

Sie verwenden == Gleichheit zu testen, indem man genug ist.

Sie verwenden p.modifiedDate, aber das Feld heißt modifiedtime.

Der letzte to_char Aufruf ist nutzlos.

Leider kann ich mit einem Orale Db testen, aber die flexible Suche sollte wie folgt aussieht:

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

Dank @ alain.janinm. Können Sie dabei helfen, sysdate zu verwenden, anstatt ein fest codiertes Datum anzugeben? – AppleBud

4

Wie alain.janinm sagte

  1. ModifiedTime statt ModifiedDate

  2. = statt von ==

  3. Ich schätze, du n nicht eed den zweiten to_char, weil es bereits char ist.

ist hier offizielle Dokumentation mit Oracle und MySQL Beispiele:

+0

danke @ Doom123. Eine Sache noch. Kann ich das aktuelle Datum in der Abfrage zum Vergleich verwenden? – AppleBud

+0

@AppleBud Oracle hat SYSDATE für aktuelle Datetime (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions172.htm). MySQL hat NOW(), CURDATE(). Sie müssen Oracle nicht testen, aber mit MySQL hat es funktioniert. ODER wenn Sie die Abfrage aus Code ausführen, können Sie die Datumszeichenfolge im Code direkt erstellen, um sie in die Abfrage einzufügen. Beachten Sie, dass hybris Server und DB Server unterschiedliche Zeitzonen haben können. So kann DB SYSDATE nicht geben, was Ihr hybris Server will. – onetuser

+0

@ doom123 - Ich kopiert die SQL-gen aus meiner flex-Abfrage aus Protokollen und lief es in HAC es schien in Ordnung, aber nicht während der Laufzeit. Irgendeine Idee warum diese Diskrepanz? – killjoy