SQL自定义函数生成如200101010005格局的订单编号[宝典]
SQL自定义函数生成如200101010005格式的订单编号
博客分类:
, SQL
SQL
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自定义函数
Java代码
1. create function [dbo].[CreateOrderID]()
2. returns decimal(12,0)
3. as
4. begin
5. DECLARE @Order_id decimal(12,0)
6. DECLARE @Date varchar(8)
7.
8. --获取当前订单表中的最新订单号
9. select @Order_id = max(order_id) from tblorder
10.
11. --获取当前日期XXXXXXXX如20010101
12. select @Date = CONVERT(varchar(8), GETDATE(),112)
13.
14. select @Order_id = @Date + case when charindex(@Date, @Order_i
d) = 1 then
15. Cast(right(Cast(Right(@Order_id,4) as decimal) + 1 + 10000,4)
as varchar(12))
16. else '0001' end
17.
18. return @Order_id 19.end
只要在Insert时调用dbo.createorderid()即可