如何在Oracle 11G中正确使用SUBSTR,INSTR和REPLACE

时间:2015-05-15 18:59:58

标签: string oracle replace oracle11g substr

我想做的是获得第三个字符串。在这个例子中:

NL 123456789 TUE

在此示例中更改为数​​字:

2927 123456789 353620

被(重新)放在后面。所以落后于'2927'。我想知道怎么做?我现在获取此字符串的代码是:

CREATE OR REPLACE FUNCTION generateISIN(
  countryCode Country.Code%TYPE,
  universityCode University.Code%TYPE,
  studentNumber VARCHAR2)
RETURN VARCHAR2
AS
  newStudentNumber VARCHAR2(50) := '';
BEGIN
 select country.code || ' ' || studentNumber || ' ' || university.code
 into newStudentNumber
 from country, university
 where country.code = countryCode
 and university.code = universityCode;
  dbms_output.put_line(newStudentNumber);

  RETURN newStudentNumber;
END generateISIN;
/

这是我获取第一个例子的选择语句

select generateISIN('NL','TUE', '123456789') from dual;

这是我的第二个select语句,它将字符串转换为数字(没有把代码循环放在这里)

select CONVERT_STR_TO_NUMERIC(generateISIN('NL','TUE', '123456789')) from dual;

如果要问的话不是太多。请给我一个我遇到问题的例子

我希望我的问题不是太模糊

提前致谢

1 个答案:

答案 0 :(得分:2)

如果您想使用INSTRSUBSTR,请执行以下操作:

SELECT SUBSTR (x, INSTR(x, ' ', 1, 2) +1) || ' ' ||
       SUBSTR (x, 1, INSTR(x, ' ') -1)    || ' ' ||
       SUBSTR (x, INSTR(x, ' ') +1, INSTR(x, ' ', 1, 2) -INSTR(x, ' '))
 FROM (SELECT 'NL 123456789 TUE' x 
         FROM dual);

虽然我宁愿使用oracle regexp_replace

SELECT regexp_replace('NL 123456789 TUE','(.+) (.+) (.+)','\3 \1 \2')
  FROM dual;

检查SQL Fiddle here