10
votes

Tester la fonction Oracle to_Date

J'écris un test d'intégration dans GRAVES utilisant Gorm.

Je veux faire quelque chose comme ce qui suit: xxx

mais je reçois l'erreur suivante:

java.sql.sqxception: jeton inattendu: to_date dans la déclaration [Supprimer des statistiques où Stat_Date = to_date (?, 'Mon-Aayyy')]

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.

Des idées sur la façon d'écrire la Supprimer SQL que cela fonctionne dans un test et en direct?

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.

Peut-on penser à une meilleure façon?


0 commentaires

5 Réponses :




25
votes

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 xxx

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.


1 commentaires

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.



7
votes

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);
}
';


0 commentaires

5
votes
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);
}

1 commentaires

Envisagez d'expliquer votre code, nous essayons de faire des questions utiles pour tout le monde avec un problème de similiaire que possible.