字串按分隔符號段範圍查詢

2021-05-04 05:35:23 字數 2539 閱讀 8882

--> 生成測試資料表:tb

if not object_id('[tb]') is null

drop table [tb]

gocreate table [tb]([col] nvarchar(21))

insert [tb]

select n'餐飲集團/華東區管理處/**廚房/營銷部' union all

select n'餐飲集團' union all

select n'餐飲集團/華東區管理處' union all

select n'餐飲集團/華東區管理處/營銷部' union all

select n'餐飲集團/華東區管理處/**廚房/營銷1部' union all

select n'餐飲集團/華東區管理處/**廚房/營銷2部' union all

select n'餐飲集團/華東區管理處/**廚房/營銷2部'

go--select * from [tb]

-->sql查詢如下:

-->sql查詢如下:

if not object_id('[fn_str]') is null

drop function [fn_str]

gocreate function [dbo].[fn_str]

(@value nvarchar(200),  --要提取的源串, 如'餐飲集團/華東區管理處/**廚房/營銷1部

@flag nvarchar(10) ,   --要查詢的分隔符號, 如 '/'

@flag_begin_pos int ,  --源串中分隔符號出現的次數,以該次數作為提取字串的起始

@flag_end_pos int      --源串中分隔符號出現的次數,以該次數作為提取字串的結束

)returns  nvarchar(200)

as begin

declare @rtv nvarchar(200);

declare @pos1 int, @pos2 int, @num int, @pos int;

set @pos = 0 ;

set @pos1 = 0 ; --儲存要返回的字串位於源串的起始位置

set @pos2 = 0 ; --儲存要返回的字串位於源串的結束位置

set @num = 0 ;  --儲存遍歷過程中分隔符合一共出現了多少次

if @value is null or @flag is null or @flag_begin_pos is null

or @flag_end_pos is null or @flag_begin_pos >= @flag_end_pos

begin

return null;

endwhile 1=1

begin

--mark1

set @pos = charindex(@flag,@value,@pos);--查詢識別符號(如'/')位置

if @pos = 0   --如果沒有找到識別符號(如'/'),則退出迴圈

begin

break;

endelse        

begin

set @num = @num + 1;  --遍歷次數+1

if @num=@flag_begin_pos --如果遍歷次數=輸入的識別符號(如'/')起始位置

begin

set @pos1=@pos + 1; --設定返回字串的起始位置=獲得mark1的值加1

endelse

begin

if @num = @flag_end_pos --繼續迴圈,直到遍歷次數=輸入的識別符號(如'/')截止位置

begin

set @pos2 = @pos ; --設定返回字串的截止位置=獲得mark2的值

break;

endend

--mark2

set @pos = @pos + 1;--繼續迴圈,遍歷次數遞增

endend

if @num <> @flag_end_pos

begin

set @rtv = n'null' ; --沒有在源串中找到合適的字串, 返回null

endelse

begin

set @rtv = substring(@value,@pos1,@pos2-@pos1); --最終獲得要取的字串值

endreturn @rtv;

endgo

select dbo.fn_str(col,'/',1,2) as col12,dbo.fn_str(col,'/',2,3) as col23 from tb

/*col12         col23

華東區管理處 **廚房

null         null

null         null

華東區管理處 null

華東區管理處 **廚房

華東區管理處 **廚房

華東區管理處 **廚房

字串按特定分隔符反轉

阿里巴巴的實習生筆試題,實現將字串按特定分隔符進行反轉,如 www.taobao.com 反轉後為 com.taobao.www 要求時間複雜度為o n 空間複雜度為o 1 解題思想 用兩個指標記錄分隔符之間的子字串,然後先將子字串進行反轉,逐段全部反轉後,再將整個字串進行一次反轉。cpp view...

oracle 按符號分隔字串 多行展示

select t.dept,t.father type,t.child type,regexp substr t.child type,1,l as c,lfrom rc dcz type t,select level l from dual connect by level 20 where l ...

Oracle 根據分隔符分隔字串

為了讓pl sql 函式返回資料的多個行 必須通過返回乙個 ref cursor 或乙個資料集合來完成 ref cursor 的這種情況侷限於可以從查詢中選擇的資料 而整個集合在可以返回前 必須進行具體化 oracle 9i 通過引入的管道化表函式糾正了後一種情況 表函式是返回整個行的集 通常作為乙...