substr 函數:截取字元串 語法:SUBSTR(string,start, [length]) string:表示源字元串,即要截取的字元串。 start:開始位置,從1開始查找。如果start是負數,則從string字元串末尾開始算起。 length:可選項,表示截取字元串長度。 示例: SE ...
substr 函數:截取字元串
語法: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 函數:返回子字元串在源字元串中的位置
語法: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
substr 函數結合 instr 函數截取字元串
現有需求:數據查詢處理需要對code進行"拆分" code命名規則類似:城市_所屬公司_員工職位_員工姓名 其中,城市、公司、職位、姓民字元串長度不固定,由於字元串長度不固定,只使用substr函數無法實現需求,需配合instr函數定位到字元'_'的位置,然後使用substr函數進行截取。詳細見下麵例子。 表數據如下: SOURCE_CODE
BJ_BAIDU_CEO_LY
SH_BOKE_MANAGER_LWX
HRB_WM_CASHIER_OYZY
獲取城市: SELECT SUBSTR (SOURCE_CODE, 1, INSTR (SOURCE_CODE, '_', 1, 1) - 1) AS CITYFROM TABLE_CODE_TEST 結果: BJ SH HRB 解釋:此處截取源字元串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 COMPANYFROM TABLE_CODE_TEST 結果: COMPANY BOKE WM 解釋:截取源字元串,從(第一個'_'出現位置+1)開始,截取個數為:第2個'_'出現位置減去第1個'_'出現位置,此時還多了一個下劃線'_',再減去1即可得到代表公司字元串。 獲取姓名: SELECT SUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAMEFROM TABLE_CODE_TEST 結果: LY LWZ OYZY 解釋:截取源字元串,從('_'第3次出現位置+1)開始截取,截取到末尾。
---------------------