有没有人知道如何把这个字符串:“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