2016-10-21 19 views
0

我不知道修整名稱中字母的有效方法。例如,f_name列有Jenny, Johnny, Doe, Ken, Smith如何修整列中的字母

我想修剪掉這些名字中的字母,所以它只包含前兩個字母。與Je, Jo, Do, Ke, Sm一樣,作爲新列的輸出。

但是這些名稱中的字母沒有相同的字母數,如Johnny有6個字母和John有4個字母。

是否有任何有效的方法來修剪不平整角色的長度而不計算所有角色在f_name中的長度並將所有條件都修剪掉所有名稱。如下所示。如果你想通過所有的名字得到至少縮寫

SUBSTR(F_NAME,1,2) 
------------------ 
Je     
Jo     
Do     
Ke     
Sm     
+0

你的問題很神祕。嘗試重新編寫它 – cha

+0

嚴重不明確... –

+0

是查詢的結果或像這樣的字符串的名稱?你想通過分割兩個字來匿名這個名字嗎?遊戲的目標是什麼? – am2

回答

0

對於Oracle使用substr()

with data (f_name) as (
    select 'Jenny' from dual union all 
    select 'Johnny' from dual union all 
    select 'Doe' from dual union all 
    select 'Ken' from dual union all 
    select 'Smith' from dual 
) 
select substr(f_name, 1, 2) 
from data 

回報。你可以寫一些像

with s as (select level as lvl from dual connect by level <(select max(LENGTH(f_name)) from your_table)) 
select f_name, 
     max(sub_f_name) keep (dense_rank FIRST order by cnt, t.lvl desc) as least_acronym 
select f_name 
    , substr(t.f_name,-lvl) as sub_f_name 
    , t.lvl 
    , count(*) over (partition by substr(t.f_name,-lvl)) as cnt 
    from your_table t 
    , s) 
    group by f_name 

NB。就像想法一樣。尚未測試

+0

謝謝,但是它可以在多個列上使用,並將所有輸出合併到一個新列中? – oncik

+0

@oncik:是的,這是可能的。 –

0

使用的串

CASE WHEN LENGTH(f_name) > 4 THEN SUBSTR(f_name,1, 2) 
0

CASE WHEN LENGTH(f_name) > 4 THEN LTRIM(f_name, 2) 
相關問題