2008-12-16 73 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。

感谢您的意见。

- 炖

相关问题