2008-12-16 70 views
1

有沒有人知道如何把這個字符串:「Smith,John R」
到這個字符串中:「jsmith」?Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字

我需要爲小寫一切較低()
尋找到逗號和跟蹤它的整數位置值
獲取通過逗號後的第一個字符,並把它放在前面的字符串
然後得到整個最後名字並在第一次初始後粘住它。

Sidenote - instr()函數與我的版本不兼容

感謝您的幫助!

+0

如果您可以指定確切版本的Oracle,這將有所幫助。 – 2008-12-16 14:41:49

+0

你可能使用哪個版本,沒有INSTR? 「 – 2008-12-16 14:42:18

+0

」674:例程(instr)無法解析。「 – CheeseConQueso 2008-12-18 21:45:21

回答

2

首先編寫您自己的INSTR函數 - 例如將其稱爲my_instr。它將從char 1開始並循環,直到找到','。

然後像INSTR那樣使用。

1

instr()與您的版本不兼容是什麼?甲骨文?你使用的是第4版還是其他?

1

我很難相信你沒有訪問到適當的instr(),但如果是這樣的話,實現你自己的版本。

假設你有理順:

 
select 
    substr( 
     lower('Smith, John R') 
    , instr('Smith, John R', ',') + 2 
    , 1 
) || -- first_initial 
    substr( 
     lower('Smith, John R') 
    , 1 
    , instr('Smith, John R', ',') - 1 
) -- last_name 
from dual; 

此外,小心你的假設,即所有的名字將在該格式。注意逗號後的單個空格以外的東西,姓氏有像「Parisi,Jr.」等數據。

1

有沒有必要創建自己的功能,而且很坦率地說,它似乎浪費了現在可以用已經存在的sql函數很容易地完成這個任務。必須小心處理馬虎數據輸入。

這裏是另一種方式來實現自己的既定目標:

with name_list as 
    (select ' Parisi, Kenneth R' name from dual) 
select name 
     -- There may be a space after the comma. This will strip an arbitrary 
     -- amount of whitespace from the first name, so we can easily extract 
     -- the first initial. 
    , substr(trim(substr(name, instr(name, ',') + 1)), 1, 1) AS first_init 
     -- a simple substring function, from the first character until the 
     -- last character before the comma. 
    , substr(trim(name), 1, instr(trim(name), ',') - 1) AS last_name 
     -- put together what we have done above to create the output field  
    , lower(substr(trim(substr(name, instr(name, ',') + 1)), 1, 1)) || 
     lower(substr(trim(name), 1, instr(trim(name), ',') - 1)) AS init_plus_last 
    from name_list; 

HTH, 加布

2

要做到這一點,最好的方法是使用Oracle正則表達式功能,像這樣:

SELECT LOWER(regexp_replace('Smith, John R', 
      '(.+)(,)([A-Z])(.+)', 
      '\3\1', 1, 1)) 
    FROM DUAL; 

也就是說,1)當你找到任何一組字符的模式,後面跟着「,」,後面跟着一個大寫字母,後面跟着任何剩餘的字符acters,取第三個元素(名字首字母)並追加姓。然後把一切都寫成小寫。

您的注意事項:「instr()函數與我的版本不兼容」對我沒有意義,因爲該函數已經存在很久了。檢查您的版本,因爲正式表達式僅在版本9i中添加到Oracle。

感謝您的意見。

- 燉

相關問題