当前位置: > 数据库 > SQL Server 2005 >

分割字段的sql语句

时间:2015-03-09 23:17来源:linux.it.net.cn 作者:IT
 
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[f_GetStr]')   and   xtype   in   (N'FN',   N'IF',   N'TF'))  
  drop   function   [dbo].[f_GetStr]  
  GO  
   
  /*--得到字符串列表指定位置的字符  
   
  可以自定义字符串列表的分隔符  
  如果取数位置超出的范围,返回空字符串  
   
  --邹建   2005.04(引用请保留此信息)--*/  
   
  /*--调用示例  
  --测试数据  
  declare   @UserItem   table(UserItemID   int,CateName   varchar(50),OtherDemo   text)  
  insert   @UserItem  
  select   1,'张三','50&黄石市小河镇&0762-2262626'   union   all  
  select   2,'李四','35&广州市&020-2262626'   union   all  
  select   3,'博士','25&青岛&0456-2262626'   union   all  
  select   4,'学士','25&北京&010-2262626'  
   
  --分拆  
  select   UserItemID,CateName  
  ,年龄=dbo.f_GetStr(OtherDemo,1)  
  ,地址=dbo.f_GetStr(OtherDemo,2)  
  ,联系电话=dbo.f_GetStr(OtherDemo,3)  
  from   @UserItem  
   
  /*--结果  
   
  UserItemID     CateName           年龄                 地址                     联系电话  
  -----------   ------------   ----------   -------------   ---------------  
  1                       张三                   50                   黄石市小河镇       0762-2262626  
  2                       李四                   35                   广州市                   020-2262626  
  3                       博士                   25                   青岛                       0456-2262626  
  4                       学士                   25                   北京                       010-2262626  
   
  (所影响的行数为   4   行)  
  --*/  
  --*/  
  CREATE   FUNCTION   f_GetStr(  
  @s   ntext,             --字符串列表  
  @pos   int               --要获取的数据信息段  
  )RETURNS   nvarchar(4000)  
  AS  
  BEGIN  
  IF   @s   IS   NULL   RETURN(NULL)  
  DECLARE   @s1   nvarchar(4000),@i   int,@j   int  
  SELECT   @i=1,@j=PATINDEX('%&%',@s)  
  WHILE   @pos>1   AND   @j>0  
  SELECT   @pos=@pos-1,  
  @j=PATINDEX('%&%',SUBSTRING(@s,@i,4000))  
  ,@i=@i+@j  
  RETURN(SUBSTRING(@s,@i,PATINDEX('%&%',SUBSTRING(@s,@i,4000)+'&')-1))  
  END  
  GO  


(责任编辑:IT)
------分隔线----------------------------