Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2011, 17h15   #1
Nouveau Membre du Club
 
Avatar de logiciel_const
 
Inscription : octobre 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 167
Points : 31
Points : 31
Par défaut Probleme de date entre sql est java

Bonjour,
voici le code java, ou j'utlise une requete sql
Code :
1
2
3
4
5
 
protected Timestamp dateAcctFrom;
.....
 query.append("AND TRUNC(p.duedate)   >=  ").append(dateAcctFrom);
....
et voici son interprétation en sql developper:
Code :
1
2
3
4
5
 
.
.
AND TRUNC(p.duedate)  >= '2008-11-28 00:00:00.0'
...
ce qui donne une erreur du fait que avec un trunc la date qu'on doit comparer doit avoir la forme suivante ex: '28/11/2008'
En cherchant ,j'ai constaté qu'il faut ajouter un to_date mais plusieurs combinaisons sont avérées incorrectes.
Merci de me donner un idée.
logiciel_const est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h27   #2
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,
Je ne connais pas assez Java pour répondre directement, mais la syntaxe correcte à obtenir est
Code :
AND TRUNC(p.duedate)  >= TO_DATE('2008-11-28', 'YYYY-MM-DD')
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h30   #3
Nouveau Membre du Club
 
Avatar de logiciel_const
 
Inscription : octobre 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 167
Points : 31
Points : 31
Citation:
Envoyé par tedo01 Voir le message
Bonjour,
Je ne connais pas assez Java pour répondre directement, mais la syntaxe correcte à obtenir est
Code :
AND TRUNC(p.duedate)  >= TO_DATE('2008-11-28', 'YYYY-MM-DD')
Merci pour ta réponse,mais en java je doit garder la variable (.append(dateAcctFrom)) telle quelle,du faite que c'est un parametre à entrer par l'utilisateur.
logiciel_const est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h39   #4
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Re,
Bien sur, je te donnais juste un exemple du résultat visé.
Le code pourrait être
Code :
query.append("AND TRUNC(p.duedate)   >=  TO_DATE(SUBSTR('").append(dateAcctFrom).append("', 1, 10), 'YYYY-MM-DD')"
Mais ce serait peut-être plus léger de formater la date saisie en Java avant de l'intégrer dans la requête SQL.
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h48   #5
Membre chevronné
 
Avatar de Z3phur
 
Homme loic
Administrateur de base de données
Inscription : décembre 2007
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme loic
Âge : 37
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 673
Points : 773
Points : 773
Bonjour,

pour ton cas il est préférable de faire :

Code :
AND to_date(p.duedate,'YYYY-MM-DD HH24:MI:SS')  >= '2008-11-28 00:00:00.0'
__________________
==========================================
La justice sans la force est impuissante, la force sans la justice est tyrannique...
Z3phur est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 27/01/2011, 18h51   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Citation:
Envoyé par Z3phur Voir le message
Bonjour,
pour ton cas il est préférable de faire :
Code :
AND to_date(p.duedate,'YYYY-MM-DD HH24:MI:SS')  >= '2008-11-28 00:00:00.0'
Houla Z3phur, pas du tout ! Un to_date d'une date !! Hérétique !!
Mais tu as soulevé un bon point : Est-il utile de faire un truc de la date si c'est pour prendre du >= : Réponse NON, ça ne fait qu'empêcher Oracle de prendre un éventuel index, et d'appliquer une fonction de date.

Le code de tedo01 est bon et on peut supprimer le trunc
Code :
query.append("AND p.duedate >=  TO_DATE(SUBSTR('").append(dateAcctFrom).append("', 1, 10), 'YYYY-MM-DD')"
Sinon, il n'est pas possible de faire du binding avec java ?? Parce que c'est porte ouverte aux injections sql de faire du concat de paramètres.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 18h57   #7
Membre chevronné
 
Avatar de Z3phur
 
Homme loic
Administrateur de base de données
Inscription : décembre 2007
Messages : 673
Détails du profil
Informations personnelles :
Nom : Homme loic
Âge : 37
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 673
Points : 773
Points : 773
Bien vu, j ai répondu trop vite sans assez réfléchir désolé
__________________
==========================================
La justice sans la force est impuissante, la force sans la justice est tyrannique...
Z3phur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 11h20   #8
Membre actif
 
Inscription : février 2008
Messages : 455
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 455
Points : 161
Points : 161
Code :
1
2
 
protected Timestamp dateAcctFrom;
Pourquoi utiliser un Timestamp plutôt qu'un Date si tu n'as pas besoin de l'heure?
Il suffirait d'utiliser un Date en java, non ?

Ps: tu peux la formatter comme tu le veux...

Code :
1
2
3
 
SimpleDateFormat  simpleFormat = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(simpleFormat.format(date1));
libuma est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h32.


 
 
 
 
Partenaires

Hébergement Web