語法:substr(string,start, [length])
string:表示源字串,即要擷取的字串。
start:開始位置,從1開始查詢。如果start是負數,則從string字串末尾開始算起。
length:可選項,表示擷取字串長度。
示例:
select substr('hello sql!', 1) from dual --擷取所有字串,返回'hello sql!'
select substr('hello sql!', 2) from dual --從第2個字元開始,擷取到末尾。返回'ello sql!'
select substr('hello sql!', -4) from dual --從倒數第4個字元開始,擷取到末尾。返回'sql!'
select substr('hello sql!', 3, 6) from dual --從第3個字元開始,擷取6個字元。返回'llo sq'
select substr('hello sql!', -4, 3) from dual --從倒數第4個字元開始,擷取3個字元。返回'sql'
語法:instr(string,child_string,[start],[show_time])
string:表示源字串。
child_string:子字串,即要查詢的字串。
start:可選項,開始位置,預設從1開始。如果為負數,則從右向左檢索。
show_time:可選項,表示子字串第幾次出現在源字串當中,預設第1次,負數則報錯。
示例:
--表示從源字串'city_company_staff'中第1個字元開始查詢子字串'_'第1次出現的位置
select instr('city_company_staff', '_') from dual --返回5
--表示從源字串'city_company_staff'中第5個字元開始查詢子字串'_'第1次出現的位置
select instr('city_company_staff', '_', 5) from dual --返回5
--表示從源字串'city_company_staff'中第5個字元開始查詢子字串'_'第1次出現的位置
select instr('city_company_staff', '_', 5, 1) from dual --返回5
--表示從源字串'city_company_staff'中第3個字元開始查詢子字串'_'第2次出現的位置
select instr('city_company_staff', '_', 3, 2) from dual --返回13
--start引數為-1,從右向左檢索,查詢'_'字串在源字串中第1次出現的位置
select instr('city_company_staff', '_', -1, 1) from dual --返回13
--start引數為-6,從右向左檢索,查詢'_'字串在源字串中第2次出現的位置
select instr('city_company_staff', '_', -6, 2) from dual --返回5
現有需求:資料查詢處理需要對code進行"拆分"
code命名規則類似:城市_所屬公司_員工職位_員工姓名
其中,城市、公司、職位、姓民字串長度不固定,由於字串長度不固定,只使用substr函式無法實現需求,需配合instr函式定位到字元'_'的位置,然後使用substr函式進行擷取。詳細見下面例子。
表資料如下:
獲取城市:
select
substr (source_code, 1, instr (source_code, '_', 1, 1) - 1) as city
from
table_code_test
結果:
解釋:此處擷取源字串source_code,從第1個字元開始,由於代表城市的code長度不固定,我們無法確定擷取幾個字元,所以使用instr函式判斷第乙個'_'字元的位置,進而確定每個source_code擷取幾個字串。
那為什麼減1呢?
是因為instr (source_code, '_', 1, 1)獲取的是源字串中'_'字元第一次出現的位置,再減1就得出了city字元個數。
獲取公司:
select
substr (
source_code,
instr (source_code, '_', 1, 1) + 1,
instr (source_code, '_', 1, 2) - instr (source_code, '_', 1, 1)-1
) as company
from
table_code_test
結果:
解釋:擷取源字串,從(第乙個'_'出現位置+1)開始,擷取個數為:第2個'_'出現位置減去第1個'_'出現位置,此時還多了乙個下劃線'_',再減去1即可得到代表公司字串。
獲取姓名:
select
substr (source_code, instr (source_code, '_', 1, 3) + 1) as stf_name
from
table_code_test
結果:
解釋:擷取源字串,從('_'第3次出現位置+1)開始擷取,擷取到末尾。
ORACLE字串擷取
substr 函式 擷取字串 語法 substr string,start,length string 表示源字串,即要擷取的字串。start 開始位置,從1開始查詢。如果start是負數,則從string字串末尾開始算起。length 可選項,表示擷取字串長度。示例 select substr h...
oracle中擷取字串
substring 返回字元 binary text 或 image 表示式的一部分。有關可與該函式一起使用的有效 microsoft sql server 資料型別的更多資訊,請參見資料型別。語法 substring expression start length 引數 expression 是字...
擷取oracle字串中的數字
方法一 如果oracle版本不是太低的話,使用 正規表示式函式 regexp substr 處理。regexp substr有5個引數,分別是 第乙個是輸入的字串 第二個是正規表示式 第三個是標識從第幾個字元開始正規表示式匹配。預設為1 第四個是標識第幾個匹配組。預設為1 第五個是是取值範圍 i 大...