substr 函数:截与字符串

语法SUBSTR(string,start, [length])

string:示意源字符串,即要截与的字符串。

start:入手下手职位地方,从1入手下手查找。若何start是正数,则从string字符串终首入手下手算起**。**

length:否选项,默示截与字符串少度。

事例

SELECT SUBSTR('Hello SQL!', 1) FROM dual     --截与一切字符串,返归'Hello SQL!'
SELECT SUBSTR('Hello SQL!', 两) FROM dual     --从第两个字符入手下手,截与到终首。返归'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个字符入手下手查找子字符串'_'第两次呈现的职位地方
SELECT INSTR('city_company_staff', '_', 3, 二) FROM dual    --返归13

--start参数为-1,从左向右检索,查找'_'字符串正在源字符串外第1次呈现的职位地方
SELECT INSTR('city_company_staff', '_', -1, 1) FROM dual    --返归13

--start参数为-6,从左向右检索,查找'_'字符串正在源字符串外第二次呈现的地位
SELECT INSTR('city_company_staff', '_', -6, 两) 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 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, 两) - INSTR (SOURCE_CODE, '_', 1, 1)-1
	) AS COMPANY
FROM
	TABLE_CODE_TEST

效果:

诠释:截与源字符串,从(第一个’_'显现职位地方+1)入手下手,截与个数为:第二个’_‘浮现职位地方减往第1个’_‘显现地位,此时借多了一个高划线’_',再减往1便可获得代表私司字符串。

猎取姓名:

SELECT
	SUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAME
FROM
	TABLE_CODE_TEST

效果:

注释:截与源字符串,从('_'第3次显现职位地方+1)入手下手截与,截与到终首。

Oracle 字符串截与 从后向前截与办法

Oracle 字符串截与 从后向前截与办法 

  • NSTR:INSTR办法的款式为
    • INSTR(源字符串, 方针字符串, 肇始职位地方, 立室序号)
    • 默许查找依次为从右到左。当肇始职位地方为正数的时辰,从左边入手下手查找。
  • SUBSTR:与子字符串 与子字符串
  • SUBSTR(源字符串,肇始地位,要与几何位)

从“肇始职位地方”入手下手,与“几"个

select 'ZA01X-00000' as item_code
,instr('ZA01X-00000','-00000',-1,1) as position
,substr('ZA01X-00000',instr('ZA01X-00000','-00000',-1,1),length('ZA01X-00000')) as result
from dual
;

--
ITEM_CODE   POSITION    RESULT
ZA01X-00000 6           -00000
--
select substr('ZA01X-00000',-6) as result
from dual
;
--
RESULT
-00000
--

-- 完成 正在ITEM CODE 外截与 ‘-00000' 字符串

总结

到此那篇闭于Oracle数据库外字符串截与最齐办法的文章便引见到那了,更多相闭Oracle字符串截与办法形式请搜刮剧本之野之前的文章或者连续涉猎上面的相闭文章心愿大师之后多多撑持剧本之野!

点赞(19) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部