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
4 Réponses :
Utilisez REGEXP_LIKE
:
SELECT * FROM yourTable WHERE REGEXP_LIKE (col2, ' to ' || col1 || '$');
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`.
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]+$'))
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>
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