Oracle
 sql >> Base de données >  >> RDS >> Oracle

Expression régulière d'un format de date spécifique

C'est une mauvaise idée. Le seul Une façon de valider qu'une date est correcte est d'essayer de la convertir en une date. Si la conversion échoue, ce n'est pas une date ; s'il réussit, alors il pourrait être. Les dates sont bien trop complexes pour être analysées par un langage normal.

Alors, créez une fonction qui la convertit en une date; vous pouvez le rendre beaucoup plus générique que vous n'en avez ici, afin qu'il puisse ensuite être réutilisé à d'autres fins :

create or replace function validate_date (
     PDate in varchar2
   , PDateFormat in varchar2
     ) return date is
begin
   return to_date(PDate, PDateFormat);
exception when others then
   return null;
end;

Cela renvoie une date s'il est capable de valider que la date et le format de date correspondent, sinon renvoie NULL s'il y a une erreur. Votre requête devient alors :

select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null