Frage

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

.

Wenn Zeilen in diese Tabelle eingefügt werden, die Vornamen und Nachnamen Felder sollen in Großbuchstaben sein, aber irgendwie sind einige Werte in diesen beiden Bereichen gemischt Fall.

Ich möchte eine Abfrage auszuführen, die mir alle Zeilen in der Tabelle angezeigt, die mit Kleinbuchstaben in das Vor- oder Nachnamen haben.

suchte ich im Netz und finde REGEXP_LIKE, aber das muss für neuere Versionen von Oracle sein - es ist nicht für mich zu arbeiten scheint,

.

Ein andere Sache, ich war versucht, „ABCDE ... z“ auf „$$$$$ ... $“ zu übersetzen und dann für ein ‚$‘ in meinem Bereich suchen, aber es muss ein besserer Weg sein?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Wie wäre es damit:

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

Andere Tipps

Ich denke, BQ SQL und Justins zweiter SQL funktionieren werden, weil in diesem Szenario:

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

Ich möchte meine Abfrage, um die ersten zwei Zeilen zurück.

Ich möchte nur sicherstellen, dass dies zwar eine effiziente Abfrage sein - meine Tabelle 500 Millionen Zeilen hat

.

Wenn Sie obere (first_name) sagen! = First_name, ist „first_name“ immer auf die aktuelle Zeile betreffend das Orakel von sucht? Ich hatte Angst, zunächst diese Methode zu verwenden, weil ich hatte Angst, ich würde diese Tabelle mit sich selbst Beitritt am Ende, aber sie so, wie Sie schrieben beide die SQL scheint es, dass die Gleichheitsprüfung auf einer Zeile-für-Zeile-Basis nur in Betrieb ist, die würde für mich arbeiten.

Wenn Sie sich für Oracle 10g oder höher Sie das unten stehende Beispiel verwenden können. Bedenken Sie, dass Sie finden müssen, um die Zeilen, wo die einen der Buchstaben in einer Spalte Klein ist.

Column1
.......
MISS
miss
MiSS

Im obigen Beispiel, wenn Sie die Werte miss und MiSS finden müssen, dann könnten Sie die folgende Abfrage verwenden

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
 SELECT * 
 FROM mytable 
 WHERE FIRST_NAME IN (SELECT FIRST_NAME 
                      FROM MY_TABLE
                      MINUS 
                      SELECT UPPER(FIRST_NAME) 
                      FROM MY_TABLE )

Versuchen Sie folgendes:

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]','c'); => Miss, miss lower text
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[A-Z]','c'); => Miss, MISS upper text

für SQL Server, auf dem die DB Sortierungseinstellung Fall unempfindlich Verwendung ist die folgende:

SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top