Format de date SYSDATE sous PL/SQL
liluane
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Sahh -
Sahh -
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!
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!
5 réponses
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!
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!
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.
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.
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.
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 :
Bref, en gros, ce que tu désire, c'est :
ce qui revient à un simple
Ensuite tout dépend de l'environnement et des NLS...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
ça m'a été d'une grande utilité.