[ORACLE]: Werte selektieren, in denen andere Zeichen als a-z und 0-9 vorkommen
Hallo zusammen,
ich möchte auf einer Oracle-Datenbank folgende SQL-Abfrage durchführen:
Selektiere alle Einträge aus Spalte "Artikel", die andere 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 ABC_01, nicht aber der Artikel ABC01.
SELECT Artikel
FROM Datenbank
where ????
Wäre klasse, wenn jemand eine Idee hätte.
Vielen Dank und Grüße
Robert
Antwort schreiben
Antwort 1 von hendrikw vom 23.03.2019, 12:27 Options
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 vom 23.03.2019, 13:23 Options
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 vom 23.03.2019, 14:32 Options
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 vom 23.03.2019, 14:43 Options
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 vom 23.03.2019, 14:57 Options
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 vom 23.03.2019, 15:35 Options
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 vom 23.03.2019, 15:52 Options
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