2012-12-14 71 views
1

我想在這個格式來顯示我的數據:獨立姓氏

First_Name Mid_Name Last_Name 
All   Ahmad  Khan 

這是我的代碼

select substr(customer_name1, 0, instr(customer_name1, ' ')-1) as first_name 
    , substr(customer_name1, instr(customer_name1, ' ')+1) as mid_name 
    , ... as last_name 
    from sttm_customers 
where customer_name1 = 'ALI AHMAD KHAN' 

誰能幫我我應該如何在添加姓氏我報告?

+0

做了 「逆向方法。減去」 存在嗎?然後你可以從最後得到last_name – floppy12

回答

3

你不能這樣做可靠的,因爲你沒有一個可靠的方法來知道什麼是一個名字和一個姓氏。上面的例子顯示了分割空白,但是這並不能可靠地進行。

如果您有「John Fitzgerald Kennedy」,那麼很簡單。你的名字是「約翰」,中間是「菲茨傑拉德」,最後是「肯尼迪」。沒問題。

如果你有「Mary Ann Summers」怎麼辦?名字應該是「瑪麗安」,姓氏是「薩默斯」,但在空白分裂不知道。將空白分割給你「Mary」,「Ann」和「Summers」,這是錯誤的。

在相反的方向,如果你有「艾迪範哈倫」? 「Eddie」是第一個名字,「Van Halen」是最後一個名字,但打破空白會給你「Eddie」,「Van」和「Halen」,這是錯誤的。

對於這個問題,你可以有「瑪麗安Van Halen」,然後你做什麼?底線:如果您沒有將您的姓和名分別記錄爲單獨的數據點,則無法將它們可靠地分開。

1
SQL> select substr(customer_name1, 0, instr(customer_name1, ' ')-1) as first_name 
    2  , substr(customer_name1, instr(customer_name1, ' ')+1, 
    3    instr(customer_name1, ' ', -1, 1) - instr(customer_name1, ' ') - 1) as mid_name 
    4  , substr(customer_name1, instr(customer_name1, ' ', -1) + 1) last_name 
    5 from (select 'ALI AHMAD KHAN' customer_name1 from dual) 
    6/

FIR MID_N LAST 
--- ----- ---- 
ALI AHMAD KHAN 

這可應對具有多箇中間名的名稱。

0

這是有點難看,但它會每一塊分開:

with data(customer_name1) as 
(
    select 'ALI AHMAD KHAN' 
    from dual 
), 
first(firstname, customer_name1) as 
(
    select substr(customer_name1, 0, instr(customer_name1, ' ')-1) as first_name, 
     ltrim(replace(customer_name1, substr(customer_name1, 0, instr(customer_name1, ' ')-1), '')) customer_name1 
    from data 
), 
middle(firstname, middlename, customer_name1) as 
(
    select firstname, 
     substr(customer_name1, 0, instr(customer_name1, ' ')-1) middlename, 
     ltrim(replace(customer_name1, substr(customer_name1, 0, instr(customer_name1, ' ')-1), '')) customer_name1 
    from first 
) 
select firstname, middlename, customer_name1 as LastName 
from middle 

參見SQL Fiddle with Demo

0

穿戴-1作爲起始志願服務崗位和子串將開始從端部,然後

計數

找到空白的INSTR希望它有助於

0

從全名中分隔名,中間名,姓氏。

它的工作oracle 11g。考慮一個字段調用uname的表用戶名,其中包含以下名稱。

sachin ramesh tendulkar 
shiva sudharson s 
shiva kumar s 
shiva nandhan s 
shiva selvan s 

要拆分的名稱爲姓,中間名,姓氏下面的查詢工作。

select 
substr(uname,1, instr(uname,' ')) as firstname, 
substr(uname, instr(uname, ' '), instr(uname, ' ', 1, 2)-instr(uname, ' ')) as middlename, 
substr(uname, instr(uname, ' ',1,2), length(uname)) as lastname from username; 

結果會是這樣的:

sachin ramesh tendulkar 
shiva sudharson s 
shiva kumar s 
shiva nandhan  s 
shiva selvan s