SQL自定义函数生成如200101010005格式的订单编号

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()即可

你可能感兴趣的:(SQL)