请问T-SQL中有没有类似于VB中切分字符串的split的函数?
表table1,字段content,值0|2|2|1|0
想实现这样的查询:select id from table where split(content,'|')(0) = '0'
当然了,split函数只是我假设的,不知道sql中有没有现成的函数可以用?如果没有,又有没有可以实现这种查询的方法呢?谢谢..
--要自己写函数
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_split]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_split]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [序数表]
GO
--为了效率,所以要一个辅助表配合
select top 8000 id=identity(int,1,1) into 序数表
from syscolumns a,syscolumns b
alter table 序数表 add constraint pk_id_序数表 primary key(id)
go
/*--字符串分函数
分拆指定分隔符的的字符串,返回结果表
--邹建 2004.04(引用请保留此信息)--*/
/*--调用示例
select * from f_split('考号kaohao 科目kemu 学期xueqi',' ')
--*/
create function f_split(
@str varchar(8000), --要分拆的字符串
@splitchar varchar(10) --分隔符
)returns table
as
return(
select re=substring(@str,id,charindex(@splitchar,@str+@splitchar,id)-id)
from 序数表
where id<=len(@str)+1 and charindex(@splitchar,@splitchar+@str,id)-id=0
)
go
http://blog.csdn.net/ktyang/archive/2006/10/08/1326198.aspx
两个函数:
1、Get_StrArrayLength
CREATE function Get_StrArrayLength
(
@str varchar(1024), --要分割的字符串
@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
2、Get_StrArrayStrOfIndex
CREATE function Get_StrArrayStrOfIndex
(
@str varchar(1024), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
)
returns varchar(1024)
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
3、应用:
set @next=1
while @next<=dbo.Get_StrArrayLength(@KeyWords,',')
begin
if dbo.Get_StrArrayStrOfIndex(@KeyWords,',',@next)<>''
set @strwhere = @strwhere +' or Keywords like ''%'+dbo.Get_StrArrayStrOfIndex(@KeyWords,',',@next)+'%'''
set @next=@next+1
end
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1326198