SQL生成如200101010005格式的订单编号、SQLServer| 2009-09-11 14:52:16 阅200101010005前面八位表示当天的年月日,后四位表示当开已经生成的订单编号,每次递增+1
sql语句格式化数字(前面补0)的参考示例:
将一个数字例如20或1使用t-sql语句转换成0020或0001
以下是详细分析:
1、select power(10,4)得到10000
2、select cast(10000+20 as varchar) 将10000转换类型 值为10020
3、select right(10020,4) 从右边取4个字符得到0020
合并
select right(cast(power(10,4) as varchar)+20,4) 得到0020
接下来生成订单号:
DECLARE @Order_id decimal(12,0)
DECLARE @Date varchar(8)
declare @Index int
--获取当前订单表中的最新订单号
select @Order_id = max(order_id) from tblorder
--获取当前日期XXXXXXXX如20010101
select @Date = CONVERT(varchar(8), GETDATE(),112)
--获取当前日期和现有订单的日期匹配如现在的最新订单号为:200101010005
--今天的日期也是20010101
--那么@Index = 1
select @Index = charindex(@Date, @Order_id)
--那么后四位则是200101010005的最后四位加1
Cast(right(Cast(Right(@Order_id,4) as decimal) + 1 + 10000,4) as varchar(12))
--否则就是从头开始'0001'
select @Order_id = @Date + case when @Index = 1 then
Cast(right(Cast(Right(@Order_id,4) as decimal) + 1 + 10000,4) as varchar(12))
else '0001' end
Sql自定义函数
create function [dbo].[CreateOrderID]()
returns decimal(12,0)
as
begin
DECLARE @Order_id decimal(12,0)
DECLARE @Date varchar(8)
--获取当前订单表中的最新订单号
select @Order_id = max(order_id) from tblorder
--获取当前日期XXXXXXXX如20010101
select @Date = CONVERT(varchar(8), GETDATE(),112)
select @Order_id = @Date + case when charindex(@Date, @Order_id) = 1 then
Cast(right(Cast(Right(@Order_id,4) as decimal) + 1 + 10000,4) as varchar(12))
else '0001' end
return @Order_id
end
只要在Insert时调用dbo.createorderid()即可