web-dev-qa-db-fra.com

Oracle - Sélectionnez où le champ contient des caractères minuscules

J'ai une table, les utilisateurs, dans une base de données Oracle 9.2.0.6. Deux des champs sont varchar - last_name et first_name.

Lorsque des lignes sont insérées dans cette table, les champs prénom et nom sont censés être en majuscules, mais certaines valeurs de ces deux champs sont mélangées.

Je souhaite exécuter une requête qui affiche toutes les lignes de la table comportant des prénoms ou des noms avec des caractères minuscules.

J'ai cherché sur Internet et trouvé REGEXP_LIKE, mais ce doit être pour les nouvelles versions d'Oracle - cela ne semble pas fonctionner pour moi.

Une autre chose que j'ai essayée était de traduire "abcde ... z" en "$$$$$ ... $" puis de rechercher un "$" dans mon champ, mais il doit y avoir une meilleure façon?

Merci d'avance!

16
BrianH

Que dis-tu de ça:

select id, first, last from mytable
where first != upper(first) or last != upper(last);
58
BQ.

Je pense que le SQL de BQ et le second SQL de Justin fonctionneront, car dans ce scénario:

first_name        last_name
----------        ---------
bob               johnson
Bob               Johnson
BOB               JOHNSON

Je souhaite que ma requête renvoie les 2 premières lignes.

Je veux simplement m'assurer que cette requête sera efficace - ma table contient 500 millions de lignes.

Lorsque vous dites upper (first_name)! = First_name, "first_name" se rapporte-t-il toujours à la ligne en cours de traitement par Oracle? J'avais peur d'utiliser cette méthode au début parce que j'avais peur de finir par joindre cette table à elle-même, mais comme vous écrivez tous les deux le code SQL, il semble que le contrôle d'égalité ne fonctionne que ligne par ligne, ce qui travaillerait pour moi.

1
BrianH

Si vous recherchez Oracle 10g ou une version ultérieure, vous pouvez utiliser l'exemple ci-dessous. Considérez que vous devez trouver les lignes où l'une des lettres d'une colonne est en minuscule. 

Column1
.......
MISS
miss
MiSS

Dans l'exemple ci-dessus, si vous devez rechercher les valeurs miss et MiSS, vous pouvez utiliser la requête ci-dessous.

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
0
Sarath Avanavu