CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

字符串拆分问题

楼主mnm35(探索者)2004-08-03 00:24:18 在 MS-SQL Server / 基础类 提问

set   @xmstr   ='<年借方发生额:101>   +   <年借方发生额:10201>   +   <年借方发生额:10202>     '  
  在存储过程中  
  怎么拆分成  
  101  
  10201  
  10202  
  呢?  
  问题点数:100、回复次数:4Top

1 楼friendliu(无为)回复于 2004-08-03 00:29:18 得分 30

用SUBSTRING函数  
   
  返回字符、binary、text   或   image   表达式的一部分。有关可与该函数一起使用的有效   Microsoft&reg;   SQL   Server&#8482;   数据类型的更多信息,请参见数据类型。    
   
  语法  
  SUBSTRING   (   expression   ,   start   ,   length   )    
   
  参数  
  expression  
   
  是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。  
   
  start  
   
  是一个整数,指定子串的开始位置。  
   
  length  
   
  是一个整数,指定子串的长度(要返回的字符数或字节数)。  
   
   
   
  说明     由于在   text   数据上使用   SUBSTRING   时   start   和   length   指定字节数,因此   DBCS   数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与   READTEXT   处理   DBCS   的方式一致。然而,由于偶而会出现奇怪的结果,建议对   DBCS   字符使用   ntext   而非   text。  
   
  Top

2 楼mnm35(探索者)回复于 2004-08-03 00:50:31 得分 0

晕,不一定多少个的Top

3 楼Lwg0901(伤心人)回复于 2004-08-03 08:12:51 得分 0

set   @a1   =   charindex(@xmstr,   ':')  
  set   @a2   =   charindex(@xmstr,   '>')  
  set   @t1   =   SUBSTRING(@xmstr,   @a1,   @a2-a1)  
  set   @xmstr   =   SUBSTRING(@xmstr,   @a2,   len(@xmstr)-a2)  
  Top

4 楼CSDMN(冒牌经理 V0.4)回复于 2004-08-03 08:31:32 得分 70

写了个拆分函数,适合这个应用  
   
  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_2]  
  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-8--*/  
   
  /*--调用示例  
   
  --调用  
  select   *   from   f_split_2('a:1,a:2,a:100,a:200',':',',')  
  --*/  
  create   function   f_split_2(  
  @str   varchar(8000), --要分拆的字符串  
  @splitchar1   varchar(10), --分隔符1  
  @splitchar2   varchar(10) --分隔符2  
  )returns   table  
  as  
  return(  
  select   re=substring(@str,a.id+1,b.id-a.id-1)  
  from   序数表   a   ,序数表   b  
  where   a.id<=len(@str)+1    
  and   b.id<=len(@str)+1  
                  and   charindex(@splitchar1,@str,a.id)-a.id=0  
  and   a.id<b.id  
                  and   b.id=charindex(@splitchar2,@str,a.id)  
  )  
  go  
   
  --调用  
  select   *   from   f_split_2('<年借方发生额:101>   +   <年借方发生额:10201>   +   <年借方发生额:10202>     ',':','>')  
   
  --结果  
  /*  
  re                  
  -----------------  
  101  
  10201  
  10202  
   
  (所影响的行数为   3   行)  
  */  
   
  Top

相关问题

  • 字符串拆分
  • 字符串拆分
  • 如何拆分字符串?
  • 拆分字字符串???
  • 关于*字符串拆分*
  • 字符串的拆分
  • 拆分一个字符串
  • 字符串拆分的问题????????
  • 在D5中怎样拆分字符串?
  • c#中如何拆分字符串

关键词

  • 函数
  • 字符
  • 数据
  • start
  • 字符串
  • xmstr
  • 拆分
  • 表达式
  • 序数表
  • 指定

得分解答快速导航

  • 帖主:mnm35
  • friendliu
  • CSDMN

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo