如何在 Oracle 11G 中正确使用 SUBSTR、INSTR 和/或 REPLACE

How to correctly use SUBSTR, INSTR and or REPLACE in Oracle 11G

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

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获取第一个示例的声明

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

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

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

要是问的还不算过分。请给我一个我给定问题的例子

希望我的问题不要太含糊

提前致谢

如果您想使用 INSTR and SUBSTR,请按照以下步骤操作:

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','(.+) (.+) (.+)','  ')
  FROM dual;

检查SQL Fiddle here