利用SQL的charindex實現字串陣列和Split函式
下標是從1開始的,不像在C#中第一字元是從0開始的。
原文地址:SQL字串陣列操作
文章出處:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/76999.html)
/*
一、按指定符號分割字串,返回分割後的元素個數,方法很簡單,就是看字串中存在多少個分隔符號,然後再加一,就是要求的結果。
--Alter function Get_StrArrayLength
create function Get_StrArrayLength
(
@str varchar(5000), --要分割的字串
@split varchar(10) --分隔符號
)
returns int
as
begin
declare @location int
declare @start int
declare @length int
set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@str,@start)
set @length=@length+1
end
return @length
end
呼叫示例:select dbo.Get_StrArrayLength('1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48',',')
返回值:4
二、按指定符號分割字串,返回分割後指定索引的第幾個元素,象陣列一樣方便
--alter function Get_StrArrayStrOfIndex
create function Get_StrArrayStrOfIndex
(
@str varchar(5000), --要分割的字串
@split varchar(10), --分隔符號
@index int --取第幾個元素
)
returns varchar(5000)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
end
if @location =0 select @location =len(@str)+1
--這兒存在兩種情況:1、字串不存在分隔符號 2、字串中存在分隔符號,跳出while迴圈後,@location為0,那預設為字串後邊有一個分隔符號。
return substring(@str,@start,@location-@start)
end
呼叫示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)
返回值:9
三、結合上邊兩個函式,象陣列一樣遍歷字串中的元素
declare @str varchar(5000)
set @str='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48'
print dbo.Get_StrArrayLength(@str,',')
declare @next int
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
print dbo.Get_StrArrayStrOfIndex(@str,',',@next)
set @next=@next+1
end
print dbo.CheckStrInArr('21',@str)
呼叫結果:
1
2
3
4
5
四、自己加一個函式,檢查一個元素是否在陣列中
Alter function CheckStrInArr(@s as varchar(50),@sArr as varchar(5000)) returns int
as
begin
declare @str varchar(5000)
set @str=@sArr
declare @next int
declare @ret int
set @ret=0
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
if dbo.Get_StrArrayStrOfIndex(@str,',',@next)=@s
begin
set @ret=1;
end
set @next=@next+1
end
return @ret
end
*/
文章出處:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/76999.html)
原文地址:SQL實現split功能的函式
文章出處:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/77000.html)
分割再成批插入
declare @s varchar(8000),@sql nvarchar(4000)
set @s='1,12,1212,4545'
set @sql='insert into t(col) select '+replace(@s,',',' col union all select ')
exec(@sql)
測試
drop table #table
declare @s varchar(8000),@sql nvarchar(4000)
set @s='1,12,1212,4545,454'
create table #table (col int)
set @sql='insert into #table(col) select '+replace(@s,',',' col union all select ')
exec(@sql)
select * from #table
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
--實現split功能 的函式
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'\'
insert @temp values(@SourceSql)
return
end
用法:select * from dbo.f_split('ABC:BC:C:D:E',':')
文章出處:DIY部落
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-629907/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sql字串分組Split函式的兩種實現方法SQL字串函式
- SQL CHARINDEX函式的使用SQLIndex函式
- sql CHARINDEX,REPLACE函式使用SQLIndex函式
- php中的chunk_split()和str_split()字串函式PHP字串函式
- JavaScript split() 分割字串生成陣列JavaScript字串陣列
- 7.PHP陣列和字串常用函式PHP陣列字串函式
- PHP 每日一函式 — 字串函式 chunk_split ()PHP函式字串
- js實現的字串和陣列的相互轉換JS字串陣列
- JavaScript陣列與字串相互轉換 join、splitJavaScript陣列字串
- 陣列排序函式-php陣列函式(一)陣列排序函式PHP
- 轉:類似SQL中的split函式SQL函式
- 精通javascript 函式和陣列JavaScript函式陣列
- JavaScript陣列、字串、數學函式的知識點JavaScript陣列字串函式
- Perl split字串分割函式用法指南字串函式
- Python strip函式和split函式Python函式
- js split()分割字串生成陣列程式碼例項JS字串陣列
- 陣列和字串陣列字串
- 【MATLAB】利用size()函式輸出陣列大小Matlab函式陣列
- 字串相關函式的實現字串函式
- 從PL/SQL儲存函式返回陣列SQL儲存函式陣列
- JavaFX教程-函式、陣列、表示式和操作Java函式陣列
- Sql字串操作函式SQL字串函式
- SQL SERVER 字串函式SQLServer字串函式
- SQL中常用的字串LEFT函式和RIGHT函式詳解!SQL字串函式
- [MSSQL]實現SQL Server中的切割字串SplitString標量函式SQLServer字串函式
- js陣列和字串的方法JS陣列字串
- T-SQL——函式——字串操作函式SQL函式字串
- 在VB.NET中利用Split和Replace函式計算字數函式
- Python-split()函式用法及簡單實現Python函式
- mysql函式substring_index實現split切割效果MySql函式Index
- Golang利用select和普通函式分別實現斐波那契數列Golang函式
- PHP內建字串函式實現PHP字串函式
- Sql Server系列:字串函式SQLServer字串函式
- Sql Server函式全解(1):字串函式SQLServer函式字串
- Sql Server函式全解(一)字串函式SQLServer函式字串
- PostgreSQL:陣列——型別、運算子和函式SQL陣列型別函式
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- PHP 陣列常用函式PHP陣列函式