Oracle: une requête, qui compte les occurrences de tous les caractères non alphanumériques dans une chaîne de caractères
Quelle serait la meilleure façon de compter les occurrences de tous les caractères non alphanumériques qui apparaissent dans une chaîne de caractères dans une base de données Oracle colonne.
Lors de la tentative de trouver une solution, j'ai réalisé que j'avais une requête qui n'a aucun rapport avec le problème, mais j'ai remarqué que je pouvais le modifier dans l'espoir de résoudre ce problème. Je suis venu avec cette:
SELECT COUNT (*), SUBSTR(TITLE, REGEXP_INSTR(UPPER(TITLE), '[^A-Z,^0-9]'), 1)
FROM TABLE_NAME
WHERE REGEXP_LIKE(UPPER(TITLE), '[^A-Z,^0-9]')
GROUP BY SUBSTR(TITLE, REGEXP_INSTR(UPPER(TITLE), '[^A-Z,^0-9]'), 1)
ORDER BY COUNT(*) DESC;
Cela fonctionne pour trouver le PREMIER non caractères alphanumériques, mais je voudrais compter les occurrences dans l'ensemble de la chaîne, et pas seulement la première occurrence. E. g. actuellement ma requête de l'analyse "(string)" trouver une parenthèse ouverte, mais j'en ai besoin pour trouver une parenthèse ouverte et une fermée la parenthèse.
Avez-vous besoin le nombre de caractères non alphanumériques ou le comte de chaque caractère non-alphanumérique? Par exemple, pour la chaîne "(1(2)3)", voulez-vous que le résultat soit à 4 ou à en quelque sorte indiquer 2 "(" et 2 ")"?
oui 2 ( et 2 ), cependant, j'ai décidé d'écrire un petit pl-sql procédure pour le faire pour moi, que la vitesse n'était pas un gros problème (je n'avais que va diriger cette fois à des fins de conception), si ce n'est plus un problème.
OriginalL'auteur Moz | 2011-01-28
Vous devez vous connecter pour publier un commentaire.
La meilleure option, comme vous l'avez découvert est d'utiliser un PL/SQL de la procédure. Je ne pense pas qu'il y a moyen de créer une regex expression qui renvoie plusieurs compte comme vous vous attendez à avoir (au moins, pas dans Oracle).
Un moyen de contourner ce problème est d'utiliser une requête récursive à examiner chaque personnage individuellement, ce qui pourrait être utilisée pour renvoyer une ligne pour chaque caractère. L'exemple suivant va travailler pour une seule ligne:
OriginalL'auteur Allan
Il y a un obscur Oracle TRADUIRE fonction qui vous permettra de le faire à la place de regexp:
OriginalL'auteur IK.
Essayez ceci:
OriginalL'auteur Chandu