The SUBSTR function returns part of a string.
The general syntax of the function is as follows:
SUBSTR(original string, begin [,how far])
SQL> SQL> SELECT SUBSTR('My address is 123 Fourth St.',1,12) 2 FROM dual;-- from ww w .ja v a2 s .c o m SUBSTR('MYAD ------------ My address i SQL>
Here, the first 12 characters are returned from original string, since begin is 1 and how far is 12.
The blanks count as characters.
SQL> SQL> SELECT SUBSTR('My address is 123 Fourth St.',5,12) 2 From dual;-- from ww w. j av a 2s . c o m SUBSTR('MYAD ------------ ddress is 12 SQL>
Here, the retrieval begins at position 5 and again goes for 12 characters.
The following example has no third argument, meaning it starts at begin and retrieves the rest of the string:
SQL> SQL> SELECT SUBSTR('My address is 123 Fourth St.',6) 2 FROM dual;-- from ww w . java2s. c o m SUBSTR('MYADDRESSIS123F ----------------------- dress is 123 Fourth St. SQL>
SUBSTR may retrieve from the right-hand side of original string, as shown below:
SQL> SQL> SELECT SUBSTR('My address is 123 Fourth St.',-9,5) 2 FROM dual;-- ww w . j a va 2s . c om SUBST ----- ourth SQL>
The result shows that starting at the right end of the string and counting backward for nine characters, then retrieving five characters from that point.
The following code uses SUBSTR and INSTR together to get the first name.
The last name is of unknown length and we rely only on the format of the names for retrieval, as shown below:
SQL> SQL> SELECT SUBSTR('First Name, Last Name', INSTR('First Name, Last Name',', ')+2) 2 FROM dual;-- w w w. j a v a 2 s. c o m SUBSTR('F --------- Last Name SQL>
The original string is "First Name, Last Name."
The begin number has been replaced by the INSTR function, which returns the position of the comma and blank space.
Since INSTR is using two characters to find the place to begin retrieval, the actual retrieval must begin two characters to the right of that point.
If we do not move over two spaces, then we get this:
SQL> SQL> SELECT SUBSTR('First Name, Last Name', INSTR('First Name, Last Name',', ')) 2 FROM dual;-- from www .j a v a2 s . c o m SUBSTR('FIR ----------- , Last Name SQL>
The result includes the comma and space because retrieval starts where the INSTR function indicated the position of search pattern occurred.
If the INSTR pattern is not found, then the entire string would be returned, as shown by this query:
SQL> SQL> SELECT SUBSTR('First Name, Last Name', INSTR('First Name, Last Name','ASDF')) 2 FROM dual;-- from www . j av a 2s .co m SUBSTR('FIRSTNAME,LAS --------------------- First Name, Last Name SQL>
which is actually this:
SQL> SQL> SELECT SUBSTR('First Name, Last Name',0) 2 FROM dual;-- from www. j av a2 s . c o m SUBSTR('FIRSTNAME,LAS --------------------- First Name, Last Name SQL>