--> 生成測試資料表: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 通過引入的管道化表函式糾正了後一種情況 表函式是返回整個行的集 通常作為乙...