有沒有人知道如何把這個字符串:「Smith,John R」
到這個字符串中:「jsmith」?Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字
我需要爲小寫一切較低()
尋找到逗號和跟蹤它的整數位置值
獲取通過逗號後的第一個字符,並把它放在前面的字符串
然後得到整個最後名字並在第一次初始後粘住它。
Sidenote - instr()函數與我的版本不兼容
感謝您的幫助!
有沒有人知道如何把這個字符串:「Smith,John R」
到這個字符串中:「jsmith」?Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字
我需要爲小寫一切較低()
尋找到逗號和跟蹤它的整數位置值
獲取通過逗號後的第一個字符,並把它放在前面的字符串
然後得到整個最後名字並在第一次初始後粘住它。
Sidenote - instr()函數與我的版本不兼容
感謝您的幫助!
首先編寫您自己的INSTR函數 - 例如將其稱爲my_instr。它將從char 1開始並循環,直到找到','。
然後像INSTR那樣使用。
instr()與您的版本不兼容是什麼?甲骨文?你使用的是第4版還是其他?
我很難相信你沒有訪問到適當的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.」等數據。
有沒有必要創建自己的功能,而且很坦率地說,它似乎浪費了現在可以用已經存在的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, 加布
要做到這一點,最好的方法是使用Oracle正則表達式功能,像這樣:
SELECT LOWER(regexp_replace('Smith, John R',
'(.+)(,)([A-Z])(.+)',
'\3\1', 1, 1))
FROM DUAL;
也就是說,1)當你找到任何一組字符的模式,後面跟着「,」,後面跟着一個大寫字母,後面跟着任何剩餘的字符acters,取第三個元素(名字首字母)並追加姓。然後把一切都寫成小寫。
您的注意事項:「instr()函數與我的版本不兼容」對我沒有意義,因爲該函數已經存在很久了。檢查您的版本,因爲正式表達式僅在版本9i中添加到Oracle。
感謝您的意見。
- 燉
如果您可以指定確切版本的Oracle,這將有所幫助。 – 2008-12-16 14:41:49
你可能使用哪個版本,沒有INSTR? 「 – 2008-12-16 14:42:18
」674:例程(instr)無法解析。「 – CheeseConQueso 2008-12-18 21:45:21