Menu

Format de date SYSDATE sous PL/SQL [Fermé]

Messages postés
1
Date d'inscription
mardi 24 juillet 2007
Dernière intervention
24 juillet 2007
- - Dernière réponse :  Sahh - 5 déc. 2018 à 15:32
Bonjour,
J'ai un problème de format de date sous PL/sql :
Je fais les requêtes suivantes dans mon interface de saisie de code sql (TOAD 8) J'obtiens le bon format que je veux. ( ie DD/MM/YYYY )

select TO_CHAR(sysdate,'DD/MM/YYYY') from dual ------->24/07/2007

select TO_CHAR(sysdate,'DD-MM-YYYY') from dual; ----------> 24-07-2007

select add_months (sysdate,0) from dual ------->24/07/2007

select trunc(sysdate) from dual ------->24/07/2007

select trunc(add_months (sysdate,0)) from dual ------->24/07/2007

select trunc(sysdate,'DD') from dual ------->24/07/2007

Par contre ici j'ai cette date très zarbi et je ne sais pas pourquoi l'année est 0007 et pas 2007.
select TO_DATE(sysdate,'DD-MM-YYYY') from dual; ------->24/07/0007

select TO_DATE(sysdate,'DD/MM/YYYY') from dual; ------->24/07/0007

Donc j'ai essayé plusieurs solutions.


J'ai déjà regardé les forums proposés sur comment récupérer que la date dans sysdate (sans l'heure) c'est toujours pareil :'( j'obtient toujours le même format!

SOMEONE HELP PLEASE! Thanks!
Afficher la suite 

5 réponses

Meilleure réponse
5
Merci
Salut,
Je suis heureux de voir que quelqu'un d'autre que moi se trouve devant le même problème.
Moi aussi j'utilise TOAD, et je crée une vue sql dans laquelle il y a une comparaison entre SYSDATE et des dates au format 'DD/MM/YYYY'.
Après avoir eu le même problème: select TO_DATE(sysdate,'DD/MM/YYYY') from dual; ------->30/10/0007 , la solution que j'ai trouvée a été d'appeler SYSDATE sans le deuxième paramètre: select TO_DATE(sysdate).
Et depuis, ô miracle, ça fonctionne!

Dire « Merci » 5

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM a aidé 35468 internautes ce mois-ci

Merci Comok,
ça m'a été d'une grande utilité.
4
Merci
Bonjour à tous,

La véritable syntaxe a utiliser est select to_date(sysdate, 'dd-mm-rrrr') from dual.

L'utilisation de « rrrr» au lieu de « yyyy » s'assure de bien gérer le siècle ce qui n'était pas nécessaire avant l'an 2000.

Au plaisir.
Je ne suis pas vraiment d'accord avec vous.

TO_DATE sert à mettre au format date une chaîne de caractère.
Il n'est donc pas correct de faire TO_DATE(SYSDATE,'DD/MM/YYYY') puisque SYSDATE n'est pas une chaîne.

Pour comparer une SYSDATE à une date précédement enregistrée au format 'DD/MM/YYYY' il faudrait plutôt faire :
TO_DATE(TO_CHAR(SYSDATE,'DD/MM/YYYY'),'DD/MM/YYYY')

C'est assez fastidieux et là ou je travaille nous faisons simplement un TRUNC(SYSDATE) ce qui n'est sans doute pas très correct mais qui fonctionne aussi bien.
Ner0lph
Messages postés
74
Date d'inscription
jeudi 27 juillet 2006
Dernière intervention
22 juin 2013
-
Pour faire des comparaisons avec des dates, il y a aussi le between.
Oui tout à fait , il faut une chaine de caractere pour formater sysdate
2
Merci
Il faut mettre deux Y (YY) dans le format et non YYYY
2
Merci
Salut à tous.
Il ne faut pas faire de TO_DATE avec une date (sysdate est déjà une date).
Je rappelle qu'une date est et sera toujours un nombre d'unité de temps depuis un moment choisi (ce qu'on appelle un TIMESTAMP). Pour notre calendrier, c'est un nombre de jours depuis l'an 0 choisi délibérément. Pour l'informatique, c'est souvent un nombre de secondes depuis le 01/01/1970...

Donc, convertir une date en date ne sert pas à grand chose... et risque de créer des incohérences. Le TO_DATE est pour convertir une chaîne de caractère qui représente une date pour nous en une date pour la machine, afin de s'en servir pour des comparaisons, des traitements, des tris...
Ça donne :
select TO_DATE('01/07/2007', 'DD/MM/YYYY') from dual; -- pour le 1er jullet 2007 (format français)
select TO_DATE('01/07/2007', 'MM/DD/YYYY') from dual; -- pour le 7 janvier (format US)


Bref, en gros, ce que tu désire, c'est :
select TO_DATE(TO_CHAR(sysdate, 'DD-MM-YYYY'), 'DD-MM-YYYY') from dual;

ce qui revient à un simple
select sysdate from dual;


Ensuite tout dépend de l'environnement et des NLS...
1
Merci
Salut,
Sinon si vous voulez absolument formater d'une certaine façon votre date par exemple au lieu d'avoir 23/11/2007 vous préférez 23-11-2007 il faut utiliser ça : SELECT TO_DATE(SYSDATE, 'DD-MM-YY') FROM dual
Et si vous n'avez pas forcément besoin d'avoir une date en sortie mais plutôt une chaine de caractères il faut utiliser ça :
SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY') FROM dual