Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

[ORACLE]: Werte selektieren, in denen andere Zeichen als a-z und 0-9 vorkommen





Frage

Hallo zusammen, ich möchte auf einer Oracle-Datenbank folgende SQL-Abfrage durchführen: Selektiere alle Einträge aus Spalte "Artikel", die [u]andere[/u] Zeichen als a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9 enthalten. Selektiert wird so z.B. der Artikel [i]ABC_01[/i], nicht aber der Artikel [i]ABC01[/i]. SELECT Artikel FROM Datenbank where [i]????[/i] Wäre klasse, wenn jemand eine Idee hätte. Vielen Dank und Grüße Robert

Antwort 1 von hendrikw

Das könntest Du mit TRANSLATE machen, indem Du in den FROM-String alle Zahlen und Buchstaben reinschreibst und den TO-String leer lässt. Dann musst Du prüfen, ob da noch was bei raus kommt.
mfg
Hendrik

Antwort 2 von Robert_TM

Hallo Hendrik,
vielen Dank schon mal für deine Antwort!
Da Oracle für mich leider noch ein großes Orakel ist, wäre es klasse, wenn du noch ein Beispiel posten könntest. Wie müsste eine entsprechende Abfrage aussehen?

Vielen Dank für deine Hilfe und Grüße

Robert

Antwort 3 von hendrikw

Das sieht in etwa so aus:

SELECT Artikel
FROM Datenbank
where translate(Artikel, '#01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ,'#') is not null


Wichtig ist, dass im TO-String ('#') überhaupt was drin steht, sonst kommt gar nichts raus.
Du solltest Dir aber im Klaren sein, dass dabei die Tabelle "Datenbank" ein Mal komplett durchgelesen wird, weil bei sowas kein Index zieht; d.h., auf einer großen Tabelle könnte das länger dauern...

mfg
Hendrik

Antwort 4 von Robert_TM

Hallo Hendrik,
wenn ich die Abfrage

Zitat:
SELECT Artikel
FROM Datenbank
where translate(Artikel, '#01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ,'#') is not null


starte, werden alle Einträge selektiert. Es scheint keine Filterung durchgeführt zu werden. Es erscheinen also auch werte mit - oder / etc.

Woran kann das liegen?

Viele Grüße

Robert

Antwort 5 von hendrikw

Das war doch das Ziel der Übung ?
Alle Einträge, die im Feld "Artikel" irgendein Zeichen enthalten, dass nicht eine Zahl oder ein Buchstabe ist.

Falls Du nach einem bestimmten Sonderzeichen suchst, ist der Operator "like" eine gute Wahl oder bei Oracle geht auch INSTR:
...
where INSTR(Artikel,'_') > 0

In dem Beispiel wird nach dem Unterstrich ('_') gesucht.
mgf
hendrik

Antwort 6 von Robert_TM

Hallo Hendrik,
ich meinte, dass auch Werte wie ABC01 selektiert werden. Und gerade diese sollten doch nicht selektiert werden.

Viele Grüße

Robert

Antwort 7 von hendrikw

Sorry , bei mir funktioniert das so. Eine Ferndiagnose ist da aber sehr schwierig.
Was für ein Datentyp ist das Feld "Artikel" ?
Hast Du in der Translate-Funktion die Buchstaben auch in Groß- und Kleinschreibung angegeben ?
Evtl. spielt der Zeichensatz noch eine Rolle...
mfg
Hendrik

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: