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

一个小样儿函数的请教,高分赠送,谢谢

楼主maxwellsky()2004-05-03 01:15:31 在 MS-SQL Server / 基础类 提问

我想实现这么一个函数;  
        我有一个字符串‘2002200520062008’,当然这个串不是一个固定长度的年份时间的序列。  
        通过一个函数实现2003是处在第几个从右边数的年份段上?  
        上述的只需要划分为以下年份段  
        1。(2008,..)  
        2。[2006,2008)  
        3.   [2005,2006)  
        4.   [2002,2005)  
      应该输出的的值是4  
  谢谢高手帮忙了  
  问题点数:100、回复次数:9Top

1 楼freedom2001(天翔)回复于 2004-05-03 01:50:26 得分 20

string   ls_str,   ls_date  
  int   li_count  
  int   i  
  int   li_year1,   li_year2,   li_date  
   
  ls_str   =   .........     //字符串赋值  
  ls_date   =   ........     //查询年份赋值  
  li_date   =   int(ls_date)  
   
  li_count   =   len(ls_date)/4  
   
  for   i   =   0   to   li_count-1  
          li_year1   =   mid(ls_str,   i*4+1,   4)  
          li_year2   =   mid(ls_str,   (i+1)*4+1,   4)  
          if   li_date   <   li_year2   and   li_date>=li_year   then  
                messagebox('提示',string(li_count   -   i))  
          end   if  
  next  
  应该是这样了,自己调试一下Top

2 楼internetcsdn(2003-8-7 9:20:26)回复于 2004-05-03 08:06:50 得分 10

try  
   
  create   function   get_date(@ye   varchar(10))  
  returns   int    
  as    
  begin  
  declare   @re   table   (id   int   identity(1,1),ye   varchar(10),ye2   varchar(10))  
  declare   @va   varchar(50)  
  select   @va   ='2002200520062008'  
  insert   @re   (ye,ye2)  
  select   substring(@va,len(@va)-3,4),''  
  union   all   select   substring(@va,len(@va)-7,4),substring(@va,len(@va)-3,4)  
  union   all   select   substring(@va,len(@va)-11,4),substring(@va,len(@va)-7,4)  
  union   all   select   substring(@va,len(@va)-15,4),substring(@va,len(@va)-11,4)  
   
  declare   @r   int  
  select   @r   =id   from   @re   where   @ye   between   ye   and   ye2  
  return   @r  
  end  
   
  select   dbo.get_date('2004')Top

3 楼tommysun(每天进步多一点)回复于 2004-05-03 10:42:04 得分 20

Declare   @year   varchar(1000),@ask   varchar(4),@tmp   varchar(4)  
  Set   @year   =   '2002200320062008'  
  Set   @ask   =   '2004'  
  Declare   @i   int,@j   int,@re   int  
  Set   @i   =   0  
  Set   @re   =   1  
  While   (len(@year)   >=   4)   and   (@i   =   0)  
  Begin  
      Set   @tmp   =   right(@year,4)  
      if   @tmp   >=   @ask  
          Set   @j   =   1  
      Else  
          Set   @j   =   0  
      Set   @year   =   left(@year,len(@year)   -   4)  
      Set   @re   =   @re   +   1  
      if   @j   =   1   and   len(@year)   >=   4   begin  
          Set   @tmp   =   right(@year,4)    
          if   @tmp   <=   @ask  
              Set   @i   =   1  
      End  
  End  
  if   @i   =   0  
      Set   @re   =   0  
  Select   @re  
  Top

4 楼zjcxc(邹建)回复于 2004-05-03 10:47:21 得分 50

--处理函数  
  create   function   f_get(  
  @year   int, --要查询的年份  
  @str   varchar(8000) --字符串  
  )returns   int  
  as  
  begin  
  declare   @i   int,@r   int  
  select   @i=len(@str),@r=0  
  while   @i>0   and   @year<right(@str,4)  
  select   @i=@i-4  
  ,@str=left(@str,@i)  
  ,@r=@r+1  
  return(@r)  
  end  
  go  
   
  --调用  
  select   dbo.f_get(2003,'2002200520062008')Top

5 楼zjcxc(邹建)回复于 2004-05-03 10:49:06 得分 0

--处理函数  
  create   function   f_get(  
  @year   int, --要查询的年份  
  @str   varchar(8000) --字符串  
  )returns   int  
  as  
  begin  
  declare   @r   int  
  set   @r=0  
  while   @str<>''   and   @year<right(@str,4)  
  select   @str=left(@str,len(@str)-4)  
  ,@r=@r+1  
  return(@r)  
  end  
  go  
   
  --调用  
  select   dbo.f_get(2003,'2002200520062008')Top

6 楼zjcxc(邹建)回复于 2004-05-03 10:49:49 得分 0

--函数还可以再简单  
   
  --处理函数  
  create   function   f_get(  
  @year   int, --要查询的年份  
  @str   varchar(8000) --字符串  
  )returns   int  
  as  
  begin  
  declare   @r   int  
  set   @r=0  
  while   @year<right(@str,4)  
  select   @str=left(@str,len(@str)-4)  
  ,@r=@r+1  
  return(@r)  
  end  
  go  
   
  --调用  
  select   dbo.f_get(2002,'2002200520062008')Top

7 楼internetcsdn(2003-8-7 9:20:26)回复于 2004-05-03 10:51:49 得分 0

向大佬学习Top

8 楼SoarInAir(亮子)回复于 2004-05-03 15:58:06 得分 0

循环外初值设定应为:   @r=1Top

9 楼seekmoon(haha)回复于 2004-05-03 16:10:22 得分 0

markTop

相关问题

  • 如何使用CopyFileEx API 函数?? 100分赠送。
  • 写一函数新建窗体,100分赠送
  • 急需office的接口函数库和说明!200分高分赠送
  • 有关CEdit的成员函数GetLine()的用法,请教高手!50分赠送
  • 至今,我不明白为什么使用友元(friend)函数!(50分赠送)
  • 分页函数
  • 帮我按说明申明一个函数,本帖加另一帖100分赠送http://community.csdn.net/Expert/topic/4188/4188408.xml?temp=.0799982
  • 散分!!纯虚函数与虚函数??
  • 150分!需两个函数!
  • WNetGetResourceParent 函数用法 100分!!!!!

关键词

  • 函数
  • date
  • va
  • li
  • 年份
  • year
  • ls
  • len
  • substring
  • ye

得分解答快速导航

  • 帖主:maxwellsky
  • freedom2001
  • internetcsdn
  • tommysun
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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