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,
你是指进到小时那个位置吗?
你可以去判断一下是不是到了9999,到了就把得到的小时加1,但是你这样会有个什么问题?
如果正好是23小时,前边又刚才是月末.就不仅是考虑进1位的问题吧?
设计不合理,不行就加字母呗.
时间精确多秒呗,获取加一位什么的
设计方案问题,跟程序没关系。没办法进1,否则到了下一个小的你不是会出现重复单号?