1
votes

Pour vérifier si la chaîne contient un nombre spécifique ou non

J'ai deux colonnes dans deux tableaux différents. La première colonne est un numéro comme 0493484402 et la deuxième colonne est audit_detail comme 'addr_mastersubscription est passé de 32488141893 à 32488141973' .

La colonne des détails de l'audit peut avoir un type de chaîne différent de celui ci-dessus. Je ne dois enregistrer que les chaînes de caractères mentionnées ci-dessus

Je dois vérifier si la valeur de la première colonne est présente ou non dans la deuxième colonne à la position du deuxième nombre.

Si le numéro n'est pas présent, j'ai besoin de ce numéro comme sortie

J'utilise le développeur SQL oracel

Le type de données de la deuxième colonne est clob et il n'y a pas de virgule dans les deux tables

Le type de données de la première colonne est varchar


0 commentaires

4 Réponses :


0
votes

Utilisez REGEXP_LIKE :

SELECT *
FROM yourTable
WHERE REGEXP_LIKE (col2, ' to ' || col1 || '$');


2 commentaires

Salut Tim, pouvez-vous s'il vous plaît m'expliquer l'expression ci-dessus


@Dhanshri REGEXP_LIKE compare la deuxième colonne avec l'expression régulière `à col1 $ . Autrement dit, il vérifie si la deuxième colonne se termine par à col1`.



0
votes

Vous devez vérifier les deux conditions puis vous pouvez utiliser REGEXP_SUBSTR et REGEXP_LIKE comme suit:

SELECT * FROM YOUR_TABLE
WHERE REGEXP_LIKE(SECOND_COLUMN, '^addr_mastersubscription has changed from [0-9]+ to [0-9]+$')
AND TO_NUMBER(FIRST_COLUMN) = TO_NUMBER(REGEXP_SUBSTR(SECOND_COLUMN,'[0-9]+$'))


0 commentaires

0
votes

Voici comment j'ai compris la question.

Les exemples de données (lignes 1 à 9) contiennent une colonne ID supplémentaire (sauf si vous prévoyez d'effectuer une jointure croisée entre ces deux tables) qui est utilisé pour joindre taba et tabb.

regexp_substr recherche le deuxième numéro dans tabb code la colonne col de>, qui est comparée à taba.col . J'ai affiché s'il existe ou non; vous pouvez afficher ce que vous voulez.

La requête dont vous pourriez avoir besoin commence à la ligne 11.

SQL> with
  2  taba (id, col) as
  3    (select 1, '0493484402' from dual union all
  4     select 2, '012345'     from dual
  5    ),
  6  tabb (id, col) as
  7    (select 1, 'addr_mastersubscription has changed from 32488141893 to 32488141973' from dual union all
  8     select 2, 'nothing changed from 098776 to 012345'                               from dual
  9    )
 10  --
 11  select a.id,
 12         case when a.col = regexp_substr(b.col, '\d+', 1, 2) then a.col || ' exists in tabb'
 13              else a.col || ' does not exist in tabb'
 14         end result
 15  from taba a join tabb b on a.id = b.id;

        ID RESULT
---------- ---------------------------------
         1 0493484402 does not exist in tabb
         2 012345 exists in tabb

SQL>


0 commentaires

0
votes

Vous pouvez utiliser INSTR () , le nom lui-même définit dans la chaîne où nous pouvons vérifier si une chaîne particulière est disponible dans la colonne respective.

Veuillez utiliser ci-dessous query,

select t1.* from table1 t1
inner join table2 t2
on (instr(t1.first_column, t2.second_column) = 0);

instr (t1.first_column, t2.second_column) = 0 Cette condition vous fournit des colonnes sans correspondance

instr (t1.first_column, t2.second_column)> 0 Cette condition vous fournit des chaînes correspondantes


0 commentaires