2017-04-18 3 views
2

J'essaie d'aller chercher des enregistrements de hybris en utilisant une requête de recherche flexible basée sur la date. J'ai essayé de trouver des ressources pour le même mais aucun n'a fonctionné. Fondamentalement, j'essaie de trouver des produits où la date de modification est égale à la date actuelle.Comment utiliser Date dans Hybris Flexible Search Query?

Ma requête en cours est:

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

Ceci est ma requête en cours. Cependant, quand je lance cela en utilisant AHC, il me donne l'erreur:

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) 

Quelqu'un peut-il me aider à ce sujet?

Répondre

2

Il y a deux questions:

Vous utilisez == pour tester l'égalité, en utilisant l'un est suffisant. Vous utilisez p.modifiedDate mais le champ s'appelle modifiedtime

Le dernier appel to_char est inutile.

Malheureusement, je peux tester avec un Db, mais la Orale recherche flexible devrait ressembler à:

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

merci @ alain.janinm. Pouvez-vous nous aider à utiliser sysdate plutôt que de spécifier une date codée? – AppleBud

4

Comme alain.janinm dit

  1. ModifiedTime au lieu de ModifiedDate

  2. = au lieu de ==

  3. Je suppose que vous ne n eed le second to_char car il est déjà char.

Voici la documentation officielle avec des exemples Oracle et MySQL:

+0

merci @ doom123. Encore une chose. Puis-je utiliser la date du jour dans la requête pour la comparaison? – AppleBud

+0

@AppleBud Oracle a SYSDATE pour le datetime actuel (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions172.htm). MySQL a maintenant(), CURDATE(). Ne pas avoir Oracle à tester, mais avec MySQL cela a fonctionné. OU si vous exécutez la requête à partir du code, vous pouvez créer directement une chaîne Date dans le code pour l'insérer dans la requête. Gardez à l'esprit que le serveur hybris et le serveur DB peuvent avoir des fuseaux horaires différents. DB SYSDATE ne peut donc pas donner ce que veut votre serveur hybris. – onetuser

+0

@ doom123 - J'ai copié le SQL gen'd de ma requête flex à partir de logs et l'ai exécuté dans HAC cela semblait bien, mais pas pendant l'exécution. Une idée de pourquoi cette divergence? – killjoy