it-swarm.com.de

Oracle - Wählen Sie aus, wo das Feld Kleinbuchstaben enthält

Ich habe eine Tabelle, Benutzer, in einer Oracle 9.2.0.6-Datenbank. Zwei der Felder sind varchar - last_name und first_name.

Wenn Zeilen in diese Tabelle eingefügt werden, sollten die Felder Vorname und Nachname nur aus Großbuchstaben bestehen, aber irgendwie sind einige Werte in diesen beiden Feldern eine Groß-/Kleinschreibung.

Ich möchte eine Abfrage ausführen, die mir alle Zeilen in der Tabelle zeigt, die Vor- oder Nachnamen mit Kleinbuchstaben enthalten.

Ich habe das Netz durchsucht und REGEXP_LIKE gefunden, aber das muss für neuere Versionen von Oracle sein - es scheint für mich nicht zu funktionieren.

Eine andere Sache, die ich versucht habe, war "abcde ... z" in "$$$$$ ... $" zu übersetzen und dann nach einem "$" in meinem Bereich zu suchen, aber es muss einen besseren Weg geben?

Danke im Voraus!

16
BrianH

Wie wäre es damit:

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

Ich denke, BQs SQL und Justins zweite SQL funktionieren, weil in diesem Szenario:

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

Ich möchte, dass meine Abfrage die ersten 2 Zeilen zurückgibt.

Ich möchte nur sicherstellen, dass dies eine effiziente Abfrage ist - meine Tabelle enthält 500 Millionen Zeilen.

Wenn Sie "upper (first_name)!" = "First_name" sagen, bezieht sich "first_name" immer auf die aktuelle Zeile, die Oracle betrachtet? Ich hatte Angst, diese Methode zuerst zu verwenden, weil ich befürchtete, ich würde diese Tabelle mit sich selbst verbinden, aber so wie Sie beide die SQL geschrieben haben, scheint es, dass die Gleichheitsprüfung nur zeilenweise durchgeführt wird würde für mich arbeiten.

1
BrianH

Wenn Sie nach Oracle 10g oder höher suchen, können Sie das folgende Beispiel verwenden. Beachten Sie, dass Sie die Zeilen ermitteln müssen, in denen der Buchstabe in einer Spalte aus Kleinbuchstaben besteht. 

Column1
.......
MISS
miss
MiSS

Wenn Sie im obigen Beispiel die Werte miss und MiSS suchen müssen, können Sie die folgende Abfrage verwenden

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