Comment utiliser REGEXP_LIKE dans une instruction case?
Je voudrais utiliser REGEXP_LIKE dans mon CAS, la déclaration
2 Questions
-
Comment puis-je obtenir REGEXP_LIKE de travail dans ce CAS?
Je reçois le message d'erreur suivantes
ORA-00904: "TRUE": invalid identifier
-
Re regex, pourquoi ne le
select '12345678' from dual
requête en retour1
?
Regex Règle
De 0 à 6 chiffres,suivi par 0 ou 1 point décimal, suivi de 0 à six chiffres.
with expression_row as
(select 'zzzz' as expression from dual union all
select '12345678' as expression from dual union all
select '12.33333' as expression from dual union all
select '.222222' as expression from dual)
select
expression,
case regexp_like( expression, '^\d{0,6}(\.{0,1}\d{0,6})$')
-- [0-6 digits][0-1 decimal][0-6 digits]
when TRUE then 'Y'
else 'N'
end as valid_y_n
from expression_row;
De Sortie Désiré
zzzz N
12345678 N
12.33333 Y
.222222 Y
Je suis la validation de ma regex modèle à l'aide de cette requête.
select 1 as valid from dual
where regexp_like( '12345678', '^\d{0,6}\.{0,1}\d{0,6}$');
- Votre expression est la mise en correspondance
78
dans12345678
pour le fait que vous commencer à l'appariement^
début de ligne,0-6
chiffres, puis la recherche d'un décimal0 or 1
temps qui est la même que de rendre facultative l'e.g\.?
, suivie par0-6
chiffres. Si vous ne voulez pas de match puis retirez le{0,1}
e.g^\d{0,6}(\.\d{0,6})$
Vous devez vous connecter pour publier un commentaire.
1) Essayez le code ci-dessous, c'est pas la regex qui ne va pas si bien que là où il se trouve. SQL fonctionne d'une manière différente de la plupart des langues lors de l'évaluation d'expressions - il ne renvoie pas true, puis de la comparer avec d'autres valeurs; vous avez besoin de mettre la condition renvoie true dans le lieu où un état ou une valeur est attendue.
2) 1 est SQL parler pour de VRAI; 0 est FAUX. C'est parce que SQL utilise des bits au lieu de booléens (même si elles sont de la même à partir d'une logique de point de vue).