首页 新闻 会员 周边

sql server 根据日期时间自动生成单号的问题

0
悬赏园豆:60 [已解决问题] 解决于 2015-11-09 15:31
DECLARE @InDate DATETIME
SET @InDate=GETDATE()
  Declare @Rst varchar(20),@MaxNo int  ,@CurrentDate varchar(20)  
  Select @Rst = '',@MaxNo = 0
  
  --取得当前日期字符串
  Select @CurrentDate = Cast( RIGHT( year(@InDate),2) as varchar) +   --
                        right('00' + cast(month(@InDate) as varchar),2) + --
                        right('00' + cast(day(@Indate) as varchar),2) +
                        right('00' + cast(DateName(hour,GetDate()) as varchar),2)
                        
      SELECT @CurrentDate         

  Select   @MaxNo = max(cast(right(autoid,4) as int)) From dbo.[order] 
  Where RIGHT( year(@InDate),2) = cast(left(autoid,2) as int)
   and        month(@InDate) = Cast(substring(autoid,3,2) as int) 
   and         day(@InDate) = cast(substring(autoid,5,2) as int) 
        
        --151031100001
        
        SELECT @MaxNo

if (isnull(@MaxNo,0) >0)
Begin
select @Rst = @CurrentDate + right('000' + cast(@MaxNo + 1 as varchar),4)
End
else
Select @Rst = @CurrentDate + '0001'

 

151031100001

.......

151031109999

年两位,月两位,日两位,小时两位, 后面四位为自增序号.

单号最多只能12位,  按上面的语句, 1小时内最多只能到9999,  怎么样改进, 如果到了9999个,  就自动往前面的进1,  

奋奋奋的主页 奋奋奋 | 初学一级 | 园豆:32
提问于:2015-10-31 10:42
< >
分享
最佳答案
0

你是指进到小时那个位置吗?

你可以去判断一下是不是到了9999,到了就把得到的小时加1,但是你这样会有个什么问题?

如果正好是23小时,前边又刚才是月末.就不仅是考虑进1位的问题吧?

设计不合理,不行就加字母呗.

收获园豆:25
SmallDong | 初学一级 |园豆:75 | 2015-10-31 15:30
其他回答(2)
0

时间精确多秒呗,获取加一位什么的

收获园豆:10
麻将我会 | 园豆:24 (初学一级) | 2015-10-31 10:55
0

设计方案问题,跟程序没关系。没办法进1,否则到了下一个小的你不是会出现重复单号?

收获园豆:25
茂茂 | 园豆:2892 (老鸟四级) | 2015-11-06 11:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册