substr SQl 函数
substr SQl function
我在 table 中解析我的姓氏和名字时遇到问题。我的代码:
SELECT value,
substr(value,instr(value,' ',1),instr(value,' ',2)-2) last_name,
FROM (SELECT 'Matt Ryan, QB' value
FROM dual);
如果我写 'Andrew Luck, QB'
它会正确解析姓氏。但是当我写 'Matt Ryan, QB'
时,它只解析姓氏中的两个字母。我用白色space来识别它。我不明白这里有什么问题。
'Matt Ryan, QB'
'Andrew Luck, QB'
您滥用了传递给 instr
的索引参数,而且您应该删除 "last_name" 之后的逗号。尝试:
SELECT value,
substr(value, instr(value,' ')+1, instr(value,' ',instr(value,' '))-1) last_name
FROM (
SELECT 'Matt Ryan, QB' value FROM dual
);
请考虑使用正则表达式。我认为这应该可以解决您的问题。
SELECT value,
REGEXP_SUBSTR(value,
'\w+\s+(\w+\s+\w+|\w+),',1,1,NULL,1) last_name
FROM (
SELECT 'Matt Ryan, QB' value FROM dual
);
勾选这个fiddle
INSTR
的出现参数是第四个参数,所以要用
instr(value,' ', 1, 1) -- first space
和
instr(value,' ', 1, 2) -- seconds space
SUBSTR
的第三个参数是要提取的字符数。这是第二个 space 的位置减去第一个 space 的位置 - 减去一个逗号:
instr(value,' ', 1, 2) -instr(value,' ', 1, 1) -1
总而言之:
SELECT value,
substr(value, instr(value,' ', 1, 1),
instr(value,' ', 1, 2) -instr(value,' ', 1, 1) -1) last_name
FROM (SELECT 'Matt Ryan, QB' value
FROM dual);
检查此 Fiddle here。
我在 table 中解析我的姓氏和名字时遇到问题。我的代码:
SELECT value,
substr(value,instr(value,' ',1),instr(value,' ',2)-2) last_name,
FROM (SELECT 'Matt Ryan, QB' value
FROM dual);
如果我写 'Andrew Luck, QB'
它会正确解析姓氏。但是当我写 'Matt Ryan, QB'
时,它只解析姓氏中的两个字母。我用白色space来识别它。我不明白这里有什么问题。
'Matt Ryan, QB'
'Andrew Luck, QB'
您滥用了传递给 instr
的索引参数,而且您应该删除 "last_name" 之后的逗号。尝试:
SELECT value,
substr(value, instr(value,' ')+1, instr(value,' ',instr(value,' '))-1) last_name
FROM (
SELECT 'Matt Ryan, QB' value FROM dual
);
请考虑使用正则表达式。我认为这应该可以解决您的问题。
SELECT value,
REGEXP_SUBSTR(value,
'\w+\s+(\w+\s+\w+|\w+),',1,1,NULL,1) last_name
FROM (
SELECT 'Matt Ryan, QB' value FROM dual
);
勾选这个fiddle
INSTR
的出现参数是第四个参数,所以要用
instr(value,' ', 1, 1) -- first space
和
instr(value,' ', 1, 2) -- seconds space
SUBSTR
的第三个参数是要提取的字符数。这是第二个 space 的位置减去第一个 space 的位置 - 减去一个逗号:
instr(value,' ', 1, 2) -instr(value,' ', 1, 1) -1
总而言之:
SELECT value,
substr(value, instr(value,' ', 1, 1),
instr(value,' ', 1, 2) -instr(value,' ', 1, 1) -1) last_name
FROM (SELECT 'Matt Ryan, QB' value
FROM dual);
检查此 Fiddle here。