J'écris un test d'intégration dans GRAVES utilisant Gorm.
Je veux faire quelque chose comme ce qui suit: p> mais je reçois l'erreur suivante: p> java.sql.sqxception: jeton inattendu: to_date dans la déclaration [Supprimer
des statistiques où Stat_Date = to_date (?, 'Mon-Aayyy')] P>
blockQuote> Je pense que l'erreur est causée par la base de données de mémoire utilisée par Gorm (est-elle H2?) Ne pas prendre en charge la fonction TO_Date. P> Des idées sur la façon d'écrire la Supprimer SQL que cela fonctionne dans un test et en direct? P> Comme je ne me soucie que du mois et de la première année, je serais à supprimer les enregistrements où la stat_date se situe entre la première et la dernière date de la date donnée. mois. p> Peut-on penser à une meilleure façon? p> p>
5 Réponses :
Oui, H2 ne prend pas en charge TO_Date, c'est dans 1.4.x RoadMap . Au lieu de cela, vous pouvez utiliser le fonction qui existe à la fois dans Oracle DB et H2. < / p>
Excellent, cela a très bien fonctionné, merci pour le pointeur.
ou vous pouvez définir votre propre to_date comme voir http://www.h2database.com/html/features.html#user_defined_functions p> p>
Cela revient toujours comme numéro 1 sur Google Recherches, voici ce que voici ce qui a fonctionné pour moi.
My Unité Tests / Environnement local Construisez et remplissez un schéma à l'aide de fichiers SQL. J'ai créé l'alias suivant dans le fichier SQL P> remarque l'utilisation de citations simples au lieu de $$ dans Fonctions définies par l'utilisateur H2 comme c'est le seul format qui a fonctionné pour moi. p> p>
Je ne suis pas l'auteur mais je dirais que c'est la bonne réponse. Étant donné que la réponse choisie suggère de modifier le SQL, cependant, si vous utilisez H2 pour des tests d'unité, vous ne changerez pas votre code pour effectuer votre travail de test de test.
J'ai dû ajuster la réponse de Bluesman afin de le faire fonctionner pour les formats de date couramment utilisés dans notre Oracle SQL.
Cette version prend en charge les dateformates comme "DD-Mon-AAAAAYY" P>
-- TO_DATE drop ALIAS if exists TO_DATE; CREATE ALIAS TO_DATE as ' import java.text.*; @CODE java.util.Date toDate(String s, String dateFormat) throws Exception { if (dateFormat.contains("MON")) { dateFormat = dateFormat.replace("MON", "MMM"); } if (dateFormat.contains("Y")) { dateFormat = dateFormat.replaceAll("Y", "y"); } if (dateFormat.contains("D")) { dateFormat = dateFormat.replaceAll("D", "d"); } return new SimpleDateFormat(dateFormat).parse(s); } ';
java.util.Date toDate(String dateTime, String dateFormat) throws Exception { if (dateFormat.contains("MON")) { dateFormat = dateFormat.replace("MON", "MMM"); } if (dateFormat.contains("Y")) { dateFormat = dateFormat.replaceAll("Y", "y"); } if (dateFormat.contains("D")) { dateFormat = dateFormat.replaceAll("D", "d"); } if (dateFormat.contains("HH")) { dateFormat = dateFormat.replaceAll("HH", "hh"); } if (dateFormat.contains("hh24")) { dateFormat = dateFormat.replaceAll("hh24", "hh"); } if (dateFormat.contains("MI") || dateFormat.contains("mi")) { dateFormat = dateFormat.replaceAll("MI", "mi").replaceAll("mi", "mm"); } if (dateFormat.contains("SS")) { dateFormat = dateFormat.replaceAll("SS", "ss"); } return new SimpleDateFormat(dateFormat).parse(dateTime); }
Envisagez d'expliquer votre code, nous essayons de faire des questions utiles pour tout le monde avec un problème de similiaire que possible.