0
votes

Récupérer les caractères avant un motif correspondant

135 ;1111776698 ;AB555678765
I have the above string and what I am looking for is to retrieve all the digits before the first occurrence of ;.But the number of characters before the first occurrence of ; varies i.e. it may be a 4 digit number or 3 digit number.I have played with regex_instr and instr, but I unable to figure this out.The query should return all the digits before the first occurrence of ;

3 commentaires

Quelle base de données utilisez-vous? Oracle?


Pourrait-il y avoir quelque chose autre que des chiffres avant le premier point-virgule? Je vois des espaces là-bas en ce moment; Pourrait-il y avoir des autres personnages?


Excuses oui oracle et juste des espaces blancs et des chiffres, rien d'autre


5 Réponses :


0
votes

Cette réponse suppose que vous utilisez la base de données Oracle. Je ne connais pas le moyen de faire cela en utilisant regex_instr code> seul, mais nous pouvons faire avec regexp_replace code> à l'aide de groupes de capture: xxx pré>

Démo h2> P>

Voici le Modèle de regex utilisé: p>

^\s*(\d{3,4})\s*;.*


0 commentaires

0
votes

Utilisation de INSTR, SUTRTSR code> et CORM code> devrait fonctionner (basé sur votre commentaire qu'il existe " juste des espaces blancs et des chiffres em>")

select TRIM(SUBSTR(s,1, INSTR(s,';')-1)) FROM t;


0 commentaires

0
votes

L'utilisation suivante en utilisant regexp_substr () devrait fonctionner: xxx


0 commentaires

0
votes

Assurez-vous d'essayer toutes les valeurs possibles dans cette première position, même à celles que vous ne vous attendez pas et assurez-vous qu'ils sont manipulés comme vous le souhaitez. Attendez-vous toujours à l'inattendu! Cette regex correspond au premier sous-groupe de chiffres zéro ou plus optionnels (permet de renvoyer un null) lorsqu'il est suivi d'un espace optionnel, puis d'un demi-point, ou de la fin de la ligne. Vous devrez peut-être resserrer (ou desserrer) les règles correspondantes de votre situation, assurez-vous de tester des valeurs incorrectes, en particulier si l'entrée provient des données saisies par l'utilisateur.

with tbl(id, str) as (
  select 1, '135 ;1111776698 ;AB555678765' from dual union all
  select 2, ' 135 ;1111776698 ;AB555678765' from dual union all
  select 3, '135;1111776698 ;AB555678765' from dual union all
  select 4, ';1111776698 ;AB555678765' from dual union all
  select 5, ';135 ;1111776698 ;AB555678765' from dual union all
  select 6, ';;1111776698 ;AB555678765' from dual union all
  select 7, 'xx135 ;1111776698 ;AB555678765' from dual union all
  select 8, '135;1111776698 ;AB555678765' from dual  union all
  select 9, '135xx;1111776698 ;AB555678765' from dual                     
)
select id, regexp_substr(str, '(\d*?)( ?;|$)', 1, 1, NULL, 1) element_1
from tbl
order by id;

       ID ELEMENT_1                     
---------- ------------------------------
         1 135                           
         2 135                           
         3 135                           
         4                               
         5                               
         6                               
         7 135                           
         8 135                           
         9                               

9 rows selected.


2 commentaires

Que fait le 6ème paramètre?


Cela indique quel sous-groupe de retourner.



0
votes

Pour obtenir le résultat souhaité, vous devez utiliser regex_substr car il sera sous-traitant des données souhaitées de la chaîne que vous donnez. Voici l'exemple de la requête.

solution à vos exemples de données:

Sélectionnez Regexp_substr ('135; 1111776698; AB555678765', '[^;] +', 1,1) de double;

Alors, ce que c'est, regex scinde la chaîne sur la base de ; séparateur. Vous aviez besoin de la première occurrence, donc j'ai donné des arguments comme 1,1 .
Donc, si vous avez besoin de la seconde chaîne 1111776698 comme sortie, vous pouvez donner un argument comme 1,2 .

La syntaxe pour regexp_substr est comme suit:

REGEXP_SUBSTR (chaîne, motif [ start_position [ NTH_Pappression [ Match_Parameter [ Sub_Expression]]]]]]]]

Voici le lien pour plus d'exemples: https://www.techonthenet.com/oracle/functions/regexp_substr.php

laissez-moi savoir si cela fonctionne pour vous. Meilleure chance.


0 commentaires