我有一个字段,我想做的是:截取该字段的某一个子串后的字符串该怎么写?

解决方案 »

  1.   

    substr函数就是截取子串的,你最好举个例子,一目了然
      

  2.   

    先用inStr函数定位
    然后用subStr函数截取 
      

  3.   

    提供两函数的基本用法,自己组合一下:
    1.  INSTR: returns the first-occurrence position of a character within a string   
    SQL> create table Employee(
      2    ID                 VARCHAR2(4 BYTE)         NOT NULL,
      3    First_Name         VARCHAR2(10 BYTE),
      4    Last_Name          VARCHAR2(10 BYTE),
      5    Start_Date         DATE,
      6    End_Date           DATE,
      7    Salary             Number(8,2),
      8    City               VARCHAR2(10 BYTE),
      9    Description        VARCHAR2(15 BYTE)
     10  )
     11  /Table created.SQL>
    SQL> -- prepare data
    SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2               values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
      3  /1 row created.SQL>
    SQL>
    SQL>
    SQL> -- display data in the table
    SQL> select * from Employee
      2  /ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
    ---- ---------- ---------- --------- --------- ---------- ---------- ---------------
    01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
    02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
    03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
    04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
    05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
    06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
    07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
    08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester8 rows selected.SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL> --INSTR: returns the first-occurrence position of a character within a string.
    SQL> --it returns a numeric value.
    SQL>
    SQL> --If it does not find the character value, it returns a 0. For example:
    SQL>
    SQL> SELECT First_name, INSTR(First_name,'a') AS INSTR FROM Employee;FIRST_NAME      INSTR
    ---------- ----------
    Jason               2
    Alison              0
    James               2
    Celia               5
    Robert              0
    Linda               5
    David               2
    James               28 rows selected.2.  Simple demo for INSTR function: returns a location within the string where search pattern begins   
    SQL> SELECT INSTR('This is a test','is') FROM dual;INSTR('THISISATEST','IS')
    -------------------------
                            3
    3.  INSTR: Look for the second occurrence of 'is'   
    SQL> SELECT INSTR('This is a test','is',1,2) FROM dual;INSTR('THISISATEST','IS',1,2)
    -----------------------------
                                6SQL>
    SQL>
    SQL>4.  If search pattern is not in the string, the INSTR function returns 0   
    SQL> SELECT INSTR('This is a test','abc',1,2) FROM dual;INSTR('THISISATEST','ABC',1,2)
    ------------------------------
                                 05.  Combine INSTR and SUBSTR together   
    SQL> SELECT SUBSTR('aaa, bb ccc', INSTR('aaa, bb ccc',', ')) FROM dual;SUBSTR('
    --------
    , bb ccc6.  If the INSTR pattern is not found, then the entire string would be returned SQL> SELECT SUBSTR('aaa bbb c', INSTR('aaa bbb c','zonk')) FROM dual;SUBSTR('A
    ---------
    aaa bbb c
    1.  Substr: retrieve a portion of the string   
    SQL> -- Substr: retrieve a portion of the string.
    SQL>
    SQL> -- SUBSTR(string, start_at_position, number_of_characters_to_retrieve)
    SQL>
    SQL> SELECT SUBSTR('Mississippi', 5, 3) FROM dual;SUB
    ---
    iss2.  SUBSTR: get the sub-string   
    SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
      3  /1 row created.SQL>
    SQL>
    SQL>
    SQL> -- display data in the table
    SQL> select * from Employee
      2  /ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
    ---- ---------- ---------- --------- --------- ---------- ---------- ---------------
    01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
    02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
    03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
    04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
    05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
    06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
    07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
    08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester8 rows selected.SQL>
    SQL> --Return the first initial and last name:
    SQL>
    SQL> SELECT SUBSTR(First_Name, 1, 1) , Last_Name FROM Employee;S LAST_NAME
    - ----------
    J Martin
    A Mathews
    J Smith
    C Rice
    R Black
    L Green
    D Larry
    J Cat8 rows selected.SQL>
    SQL>
    SQL> -- clean the table
    SQL> drop table Employee
      2  /Table dropped.SQL>
    SQL>
    SQL>3.  Simple demo for SUBSTR function    
    SQL>
    SQL> 
    SQL> SELECT SUBSTR('My address is 123 Fourth St.',1,12) FROM dual;SUBSTR('MYAD
    ------------
    My address iSQL>4.  SUBSTR: from the right-hand side of original string   
    SQL>
    SQL> -- SUBSTR: from the right-hand side of original string:
    SQL>
    SQL> SELECT SUBSTR('My address is 123 Fourth St.',-9,5) FROM dual;SUBST
    -----
    ourthSQL>
    5.  SUBSTR and INSTR are used together 
    SQL>
    SQL> -- SUBSTR and INSTR are used together
    SQL>
    SQL> SELECT SUBSTR('aaa, bb ccc', INSTR('aaa, bb ccc',', ')+2) FROM dual;SUBSTR
    ------
    bb ccc