Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> ADP  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1701942
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

请问T-SQL中有没有类似于VB中切分字符串的split的函数?

作者:未详  摘自:未详  :cg1  更新日期:2006-12-2  浏览人次:

 

请问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

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利