2016-04-08 9 views
0

Ich habe Folgendes versucht, aber es gibt keine (Null) Werte zurück. Wie kann ich Nullwerte in die Verwendung eines regulären Ausdrucks mit Oracle einbeziehen und tatsächlich alles zurückgeben, einschließlich null. (Es ist notwendig, einen regulären Ausdruck zu verwenden, da der Wert mit einer Variablen in Python ersetzt wird, und so wird der Wert nicht immer null sein. Sonst könnte ich nur den Ausdruck auslassen.)Include null in Oracle Regex

SELECT * from table WHERE 
REGEXP_LIKE (column1,'.*|NULL$') 
+2

'NULL' ist keine Zeichenkette. Regex kann nur einem * string * Muster entsprechen. –

+0

also, was wäre die eleganteste Weise, es zu tun, wenn ich null einschließen wollte? – Nickpick

+0

Sie sem nach Null oder irgendeinem (nicht-null) Wert zu suchen, der die Überprüfung ein wenig sinnlos macht? Oder sagst du, dass das Regex * -Muster * von einer Variablen kommt, also hast du nicht wirklich '. *'? Wenn dies der Fall ist, ist das Beispielmuster etwas verwirrend. Wie ist die Arbeit, die Sie verwendet haben. –

Antwort

1

Zwei Methoden.

Explicit Vergleich:

WHERE (REGEXP_LIKE(column1, '.*') OR column1 IS NULL) 

oder Ersatz:

WHERE REGEXP_LIKE(COALESCE(column1, '<NULL>'), '.*|<NULL>') 

Die zweite Methode ist gefährlicher, weil Sie bereits die Ersatzzeichenfolge in der Spalte haben könnten.

+0

Die zweite Methode kann durch Ändern der Alternative in der Regexp von zu^$ – mathguy

+0

sicher gemacht werden. Damit ist die erste Methode sowohl einfacher zu lesen und zu verstehen und effizienter (kein Aufruf an COALESCE in jeder Zeile und kein zusätzlicher String-Vergleich für NULL-Werte). – mathguy

+0

@mathguy - Sie könnten immer noch eine falsche Übereinstimmung erhalten, wenn der Spaltenwert tatsächlich "" ist; die Anker verhindern nur, dass sie übereinstimmen, wenn das Teil eines längeren Wertes ist? –

Verwandte Themen