|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
Bonjour,
Voila j'aimerai savoir comment récupérer le trimestre en cours en connaissant le mois en cours. j'ai trouvé la fonction to_date pour mettre dans le where, je voudrais donc faire un truc du genre Code :
SELECT * FROM ma_table WHERE champ_date = to_date(sysdate, 'q'); Mais cette requete ne marche pas elle retourne : Citation:
|
|
|
|
00
|
|
|
#2 | ||||
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
En utilisant le to_date, tu essaies de convertir une chaîne de caractère en date.
Si tu veux récupérer le trimestre : Code :
Code :
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
||||
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
alors j'ai essayé en remplaçant mon to_date par to_char mais la requête ne retourne toujours rien et je ne vois pas d'autres façons de faire ... (je suis un peu une bille en sql ça aide pas
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
A quoi correspond ta colonne champ_date ?
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
En fait j'ai un script écrit en php qui tourne toutes les 5 minutes (configuré dans mon crontab) et qui récupère la disponiblilité de toutes mes appli et enregistre ça dans ma table
mon champ champ_date corresponds donc à la date + l'heure de la vérif en gros je fais un Code :
INSERT INTO ma_table(champ_date) VALUES (sysdate); |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Et tu ne vois pas le problème ? Tu compares une date à une chaîne de caractère... Compares des choses identiques et cela fonctionnera
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#7 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
Le truc c'est que si je fais quelque chose du genre
Code :
SELECT * FROM ma-TABLE WHERE champ_date = to_char(sysdate, 'DD/MM/YYYY'); Code :
SELECT * FROM ma-TABLE WHERE champ_date = to_char(sysdate, 'DD - HH24:MI:SS'); Et puis si j'insérais un char dans un champ de type date oracle m'aurait retourné une erreur non ? le sysdate ne serait-il pas converti automatiquement en date ? (beaucoup de questions certes mais c'est pour mieux comprendre par la suite) |
|
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
Si tu fais un to_char(sysdate, 'q'), c'est une chaîne de caractères sous forme de nombre qui est renvoyée et non sous forme de date, donc ce n'est pas une comparaison cohérente. => soit tu compares des chaînes de caractères correspondant au numéro de trimestre: Code :
SELECT * FROM ma-TABLE WHERE to_char(champ_date, 'q') = to_char(sysdate, 'q'); Code :
SELECT * FROM ma-TABLE WHERE trunc(champ_date, 'q') = trunc(sysdate, 'q');
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
|
|
#9 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
Ok ok, je comprends. Tes requêtes marchent bien, merci beaucoup pour ton aide, j'y vois plus clair !
|
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#11 | |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
Je reviens sur mon sujet, je pensais avoir saisi l'esprit mais il s'avère que j'ai encore un problème ...
J'ai testé plusieurs sortes de requête dont : Code :
SELECT * FROM ma_table WHERE to_char(champ_date, 'DD/MM/YYYY') = to_char(sysdate, 'DD/MM/YYYY'); Code :
SELECT * FROM ma_table WHERE to_char(champ_date, 'DD/MM/YYYY') = to_char('30/07/2008', 'DD/MM/YYYY'); J'ai essayé des between aussi mais dès que la date renseignée est une autre que sysdate, erreur suivante : Citation:
|
|
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Code :
SELECT * FROM ma_table WHERE champ_date = to_date ('30/04/1985', 'DD/MM/YYYY') |
|
|
00
|
|
|
#13 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Ce qu'il faut que tu comprennes c'est que les fonctions TO_xxx sont des fonctions de conversion.
to_char(sysdate, 'DD/MM/YYYY') a un sens puisque tu convertis la date du jour en chaine de caractères au format DD/MM/YYYY Mais to_char('30/07/2008', 'DD/MM/YYYY') n' aucun sens puisque '30/07/2008' est déjà une chaîne de caractère. Remarque importante : il est plus propre quand tu compares des dates, d'utiliser la fonction trunc qui conserve le format date mais qui tronque à la précision demandée. Ainsi la requête suivante revient au même que ta première requête : Code :
SELECT * FROM ma_table WHERE trunc(champ_date, 'DD') = trunc(sysdate, 'DD');
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#14 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
|
|
#15 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
Oki oki, en effet ça marche.
Mais donc cela voudrait dire que le sysdate lors de l'insert est convertit automatiquement au format date ? si c'est le cas j'aurai donc (si j'ai bien compris) tout le temps à faire ce cette façon lors des select (c-a-d champ_date = to_date(ma date, format) ). |
|
|
00
|
|
|
#16 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
En effet avec les heures il retourne une erreur ...
Et si je modifiais ma requête insert pour qu'il y ai un système de select qui fonctionne à coup sur ? comment devrais-je insérer mon sysdate dans le champ date ? |
|
|
00
|
|
|
#17 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
SYSDATE est un fonction qui renvoie une date. Comme toutes les dates oracle, elle contient les jours, mois, années, heures, minutes, secondes
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com