2017-04-19 28 views
0

使用Oracle 11.我們需要刪除一個分號和任何在一組字符串中的分號右側的分號。僅顯示特殊字符左側的字符

該字符串可能包含也可能不包含分號。如果沒有分號,我們將返回整個字符串。

我可以看到使用CASE來改變字符串只有當有一個分號時,但肯定是語法去處理分號和分號後面的所有內容。

字符串

123456;789154將返回123456

123456789將返回123456789

Case 
When string1 like ('%;%') 
     then substr(…….) or trim(…) 

Else string1 

End 
As trimmedstring 

任何和所有幫助/指針讚賞

+2

看看[INSTR ](https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions068.htm) – abhi

+0

如果字符串中有多個分號,該怎麼辦?你需要從第一個分號開始刪除任何東西嗎? – Aleksej

+0

在數據集中,只會有一個,但是如果數據集發生更改,我們希望從第一個下一個中刪除所有。 – user761758

回答

3

假設你要刪除任何東西從第一開始字符串中的分號,這可能是一種方法:

with test(s) as (
    select '123456;789154' from dual union all 
    select '123456;789154;567' from dual union all 
    select '123456789' from dual 
) 
select s, 
     case 
     when instr(s, ';') = 0 then s 
     else substr(s, 1, instr(s, ';')-1) 
     end 
from test 

使用正則表達式,你可以得到相同的結果更緊湊,但效率較低的方式,具有:

regexp_substr(s, '[^;]*') 
+0

完美!謝謝.. – user761758

-1

試試這個:

Select LEFT(Name, Case 
     WHEN CHARINDEX(';', Name) = 0 
     then Len(Name) 
      else CHARINDEX(';', Name)-1 END) from CustomerDetails 
+0

left&charindex不是Oracle的屬性。 – user761758