Hallo Markus,
Er meint, mit einem „in“ würde es leichter gehen. Aber da erhalte ich auch nur Fehlermeldungen und keine Ergebnisse.
Wie bereits geschrieben, Deine Versuche zeugen von Verzweiflung - sie sind für jemand, der etwas Erfahrung hat, offensichtlich falsch und brauchen nicht näher diskutiert zu werden.
IN vergleicht einen Wert mit einer Wertliste oder der Wertemenge einer einspaltigen Unterabfrage.
In der Unterabfrage die gleiche OR-Verknüpfung zu machen, vereinfacht die Lösung nicht. Bleibt also die Wertliste. Du kannst dort keine Wildcards verwenden, wie Du in Deinem ersten Versuch bereits gemerkt hast.
Somit bleibt übrig, eine Operation auf Deine Suchspalte anzuwenden, die Dir den ersten Buchstaben zurückliefert. Beispiele dafür wären ein CAST oder eine Funktion, die Dir eine Teilzeichenkette zurückliefert. Bei beidem weiß ich nicht, wie es mit der ANSI-SQL-Kompatibilität aussieht.
T-SQL (MS SQL-Server) unterstützt beispielsweise folgendes:
SELECT
last_name
FROM
employees
WHERE
-- Prokrustes: Passe den Wert der Spalte last_name in ein einziges Zeichen ein.
-- Alles, was über das Bett (das einzige Zeichen) hinausragt, wird abgeschnitten.
CAST(last_name AS VARCHAR(1)) IN ('J', 'K', 'L', 'M')
oder
SELECT
last_name
FROM
employees
WHERE
-- Verwende die Funktion SUBSTRING (keine Ahnung, ob die in Oracle genauso
-- heißt und die gleichen Parameter entegennimmt), um das erste Zeichen zu
-- bekommen, das in last_name steht.
SUBSTRING(last_name, 1, 1) IN ('J', 'K', 'L', 'M')
Wie bereits erwähnt: Keine Garantie für ANSI-SQL-Kompatibilität oder Portierbarkeit.
Zuguterletzt gäbe es auch noch die Möglichkeit des Vergleiches mit größer gleich J und echt kleiner N (wobei Groß-/Kleinschreibung ggf. berücksichtigt) werden muss.
Freundliche Grüße
Vinzenz