J'ai une colonne qui a des valeurs ou des lignes comme combinaison de nom et de code comme indiqué ci-dessous.
data_current p> et je veux obtenir le nom et le code Différentes colonnes, mais le séparateur '_' et son occurrence (comptage et position) n'est pas la même dans chaque rangée ou toutes les valeurs ci-dessus. p> Comment lire la chaîne à droite et extraire le nom et l'extraction du nom et de l'extraction du nom ci-dessous p> Résultat requis P> Name Code
---------------------------------------------
Saint_Peter_King_Jr 0001
Kishore_Prasad_Misra 1253
George_Floyd 21543
Veer_Venkata_Sai_Narsimha_Kishore 00015
3 Réponses :
Sous SQL utilise des fonctions intégrées Oracle Instr et SUBSTR et suppose que le" Code "est toujours la dernière partie de la chaîne et est toujours précédée d'un seul, un soulignement caractère, c'est-à-dire résultat est ... p> Notez que vous pouvez remplacer le nom de la colonne , Ie _ code> colonne_x code> pour le littéral à chaîne. p> p>
Salut Abra, merveilleux et merci une tonne. Ça a marché. -1 après que le séparateur ait fonctionné parfaitement. Sans -1, il lit de gauche mais avec -1, il lit de droite. génial.
Vous ne pouvez pas faire cela avec des fonctions intégrées. Vous allez devoir écrire votre propre fonction pour l'affronter de procédure. P>
la méthode REGEXP_SUBSTR. La déclaration avec la déclaration définit simplement les données, la viande est dans la sélection. Les expressions régulières gèrent ce que vous entendez par dynamique, c'est-à-dire un nombre inconnu de caractères du code et / ou un nombre inconnu de nombres dans le code. La parenthèse dans l'expression régulière définit un groupe capturé, qui est renvoyé. Pour le nom, l'ensemble de tous les caractères avant le dernier soulignement suivi de 1 ou plusieurs chiffres, et pour le code, l'ensemble de 1 chiffres ou plus après n'importe quel nombre de caractères et le dernier soulignement.
WITH tbl(column_X) AS ( SELECT 'Saint_Peter_King_Jr_0001' FROM dual UNION ALL SELECT 'Kishore_Prasad_Misra_1253' FROM dual UNION ALL SELECT 'George_Floyd_21543' FROM dual UNION ALL SELECT 'Veer_Venkata_Sai_Narsimha_Kishore_00015' FROM dual ) SELECT REGEXP_SUBSTR(column_X, '(.*?)_\d+', 1, 1, NULL, 1) AS NAME, REGEXP_SUBSTR(column_X, '.*?_(\d+)', 1, 1, NULL, 1) AS code FROM tbl; NAME CODE --------------------------------------- --------------------------------------- Saint_Peter_King_Jr 0001 Kishore_Prasad_Misra 1253 George_Floyd 21543 Veer_Venkata_Sai_Narsimha_Kishore 00015 4 rows selected.
Bonjour Gary, il existe de nombreux disques et pas seulement 4, c'est trop difficile d'ajouter une requête Sélectionner pour tous les enregistrements.
@ kiss.shoremishra Veuillez noter que l'aide est appelée CTE pour une expression de table commune et utilisée ici pour créer un ensemble de données pour l'exemple. Le Select ci-dessous est appliqué sur ce jeu de données pour l'exemple. Vous n'utiliseriez que le choix ci-dessous et la clause de votre article sera votre table réelle.
Bien sûr, la difficulté serait complètement éliminée si vous deviez réparer votre modèle de données gravement imparfait. "Nom" et "Code" doivent être deux colonnes distinctes. Votre conception actuelle enfreint la troisième conception de forme normale, ce qui est le cœur de la conception de données relationnelle.