2016-06-22 7 views
0

Ich habe eine Spalte whos Wert Kombination von zwei Werten:Entfernen slash auf Werte in Abhängigkeit

(SELECT value FROM table where id = 'some_unique_id') || '/' || other_table.somecolumn 

Diese beiden Werte beide Werte haben kann, kann man einen Wert haben, oder keiner von ihnen kann einen Wert haben. Wenn beide keinen Wert haben, wird zur Zeit '/' angezeigt, aber wenn beide keinen Wert haben, möchte ich ein Leerzeichen anzeigen. Wenn other_table.somecolumn keinen Wert hat, wird es als [firstvalue]/angezeigt, aber ich möchte ti ohne das /, so dass nur der erste Wert angezeigt wird. Schließlich, wenn der erste Wert keinen Wert hat, wird er als/[zweiter Wert] angezeigt, aber wiederum möchte ich, dass/entfernt wird und nur den zweiten Wert anzeigt. Ich bin mir nicht sicher, wie ich das machen soll, ich habe versucht, mit der Dekodierfunktion herumzuspielen, kann es aber nicht zur Arbeit bringen. wenn das wirklich nötig ist, die von der Unterabfrage ist kompliziert, - -

Antwort

2

können Sie entweder eine gewisse Logik hinzufügen, um zu entscheiden, ob der Schrägstrich überhaupt hinzuzufügen, oder Sie können alle vorderen oder hinteren Schrägstriche trim():

select trim(both '/' from 
    (SELECT value FROM table where id = 'some_unique_id') || '/' || other_table.somecolumn) 
from ... 

Obwohl das voraussetzt, dass Ihre zwei Werte nicht selbst mit Schrägstrichen beginnen oder enden - wenn sie dies tun, könnten diese auch entfernt werden. Wenn Sie den Schrägstrich als eine Art Trennzeichen verwenden, das sowieso verwirrend wäre.

Schnell Demo:

with t (str) as (
    select '/second' from dual 
    union all select 'first/' from dual 
    union all select '/' from dual 
    union all select 'first/second' from dual 
    union all select '/first/second/' from dual 
) 
select trim('/' from str) from t; 

TRIM('/'FROMST 
-------------- 
second   
first   

first/second 
first/second 
+0

Danke, funktioniert super! – user2924127