1. 程式人生 > >Oracle INSTR函式(子字串查詢)語法詳解及應用例項

Oracle INSTR函式(子字串查詢)語法詳解及應用例項

 據說以下這道看似簡單的問題可以測試Oracle查詢的能力: 問題: 答案: select c.ci_id,wm_concat(s.stu_name)
from pm_ci c,pm_stu s
where instr(c.stu_ids,s.stu_id)>0
group by ci_id 答案中用了兩個目前沒用過的函式:wm_concat()和instr()函式。 前者用來連線字串,後者則用來查詢子字串。於是,在Oracle Database SQL Reference中找了下資料,講解的非常詳細。如果要快速瞭解該函式的用法,問一下度娘也是個不錯的選擇。 ------------------------------------------------------------------------------------------------------------------------- 語法如下:
  instr( string1, string2, start_position,nth_appearance )
string1 源字串,要在此字串中查詢。
string2 要在string1中查詢的字串 。
start_position 代表string1 的哪個位置開始查詢。此引數可選,如果省略預設為1. 字串索引從1開始。如果此引數為正,從左到右開始檢索,如果此引數為負,從右到左檢索,返回要查詢的字串在源字串中的開始索引。
nth_appearance 代表要查詢第幾次出現的string2. 此引數可選,如果省略,預設為 1.如果為負數系統會報錯。
注意:
  位置索引號從1開始。
  如果String2在String1中沒有找到,instr函式返回0。
  示例:
  SELECT instr('syranmo','s') FROM dual; -- 返回 1
  SELECT instr('syranmo','ra') FROM dual; -- 返回 3
  SELECT instr('syran mo','at',1,2) FROM dual; -- 返回 0

---------------------------------------------------------------------------------------------------------------------------

INSTR
Syntax


Purpose
The INSTR functions search string for substring. The search operation is defined as comparing the substring argument with substrings of string of the same length for
equality until a match is found or there are no more substrings left. Each consecutive compared substring of string begins one character to the right (for forward searches)
or one character to the left (for backward searches) from the first character of the previous compared substring. If a substring that is equal to substring is found, then
the function returns an integer indicating the position of the first character of this substring. If no such substring is found, then the function returns zero.
■ position is an nonzero integer indicating the character of string where Oracle Database begins the search—that is, the position of the first character of the first substring to compare with substring. If position is negative, then Oracle counts backward from the end of string and then searches backward from the resulting position.
■ occurrence is an integer indicating which occurrence of substring in string Oracle should search for. The value of occurrence must be positive. If occurrence is greater than 1, then the database does not return on the first match but continues comparing consecutive substrings of string, as described above, until match number occurrence has been found.
INSTR accepts and returns positions in characters as defined by the input character set, with the first character of string having position 1. INSTRB uses bytes instead of
characters. INSTRC uses Unicode complete characters. INSTR2 uses UCS2 code points.
INSTR4 uses UCS4 code points.
string can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB.
The exceptions are INSTRC, INSTR2, and INSTR4, which do not allow string to be a CLOB or NCLOB.
substring can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB.
The value returned is of NUMBER data type.
Both position and occurrence must be of data type NUMBER, or any data type that can be implicitly converted to NUMBER, and must resolve to an integer. The default values of both position and occurrence are 1, meaning Oracle begins searching at the first character of string for the first occurrence of substring. The return value is relative to
the beginning of string, regardless of the value of position.
See Also: Table 3–10, " Implicit Type Conversion Matrix" on page 3-40 for more information on implicit conversion

Examples
The following example searches the string CORPORATE FLOOR, beginning with the third
character, for the string "OR". It returns the position in CORPORATE FLOOR at which the
second occurrence of "OR" begins:
SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) "Instring"
FROM DUAL;
Instring
----------
14
In the next example, Oracle counts backward from the last character to the third
character from the end, which is the first O in FLOOR. Oracle then searches backward for
the second occurrence of OR, and finds that this second occurrence begins with the
second character in the search string :
SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) "Reversed Instring"
FROM DUAL;
Reversed Instring
-----------------
2
The next example assumes a double-byte database character set.
SELECT INSTRB('CORPORATE FLOOR','OR',5,2) "Instring in bytes"
FROM DUAL;
Instring in bytes
-----------------
27