Bonjour,
Je cherche une fonction qui vérifie la date et retourne un défaut ou null si la date n'est pas valable.
Car j'ai un problème avec SQL qui me sort l'erreur suivante: ORA-01848: day of year must be between 1 and 365 (366 for leap year)
Ainsi j'ai crée le petit code suivant :
DECODE(DATASTREAM.P1EFTJ,0,0,to_number(to_char(user::jdatetimeToCalendar(DATASTREAM.P1EFTJ),'YYYYMMDD')))
Ce que je souhaiterai c'est dire à cette fonction que lorsque le jour n'est pas compris entre 1 et 366 alors il sort une valeur null.
Merci d'avance pour votre aide
# WHERE STR_TO_DATE(ta_date, '%d/%m/%Y') IS NOT NULL
Posté par pralines . Évalué à 2. Dernière modification le 06 juillet 2016 à 15:10.
tout est dans le titre
ça ne vérifie pas spécifiquement le jour, mais l'ensemble de la date, je pense que ça retourne NULL même avec une date qui a l'air valide comme le 29/02/2015
c'est une fonction MySQL/MariaDB, mais on peut espérer qu'un truc comme Oracle ait une fonction équivalente non ?
Envoyé depuis mon Archlinux
# Re: Fonction qui vérifie la date ou retourne NULL ou DEFAULT s
Posté par benja . Évalué à 2. Dernière modification le 07 juillet 2016 à 18:19.
Peut-on voir le code en question ou l'endroit qui génère l'erreure ?
Je te suggère d'utiliser les conversions standards, i.e. CAST AS, ça te fera déjà un oracle-isme de moins… Btw, je reste dubitatif quant à la pertinence de faire une conversion to_char -> to number. Ne serait-il pas mieux d'utiliser TRUNC(date) voir, mieux, EXTRACT qui est standardisé SQL ?
Utilise CASE WHEN cond THEN … [WHEN cond2 THEN …] END à la place de ton DECODE, cf.
http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm .
PS: J'essayerais d'éviter un maximum les oracle-ismes. Là pluspart du temps il existe un fonction SQL équivalente: genre NVL -> COALESCE, TRUNC -> EXTRACT, CAST, etc. La doc de postgresql est très pratique pour cela :p
[^] # Re: Fonction qui vérifie la date ou retourne NULL ou DEFAULT s
Posté par benja . Évalué à 2. Dernière modification le 08 juillet 2016 à 05:16.
J'ai vu que tu as posté la même question sur un autre forum (developpez.com) et que, ensuite, tu y as écris avoir trouvé une solution. Pourrait-on (au moins sur ce site…) connaître cette solution ?
Je dis ça histoire d'apprendre moi aussi quelque chose car lire la doc d'oracle/pg, ça je savais déja faire… Pour preuve: je n'ai rien vu d'étrange dans ton utilisation de decode (mis à part le fait que tu ne sais pas faire un test ">366 ou <1"). Quel est ce paramètre en plus dont tu fais mention ?
Deuxièmement, ta fameuse "user::jdatetimeToCalendar" ne devrait pas te rendre une date (ou null) directement ? Je veux dire, faire une validation de date avec des expression conditionnelles en SQL c'est un peu WTF, non ? Je vais peut-être t'apprende un truc, mais il parraitrait que certaines années il n'y a que 365 jours, c'est dingue non ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.