YYMM#### 如何生成发票号
YYMM#### how to generate invoice number
我必须生成像 YYMM#### 这样的发票编号 YY 和 MM 很容易,我们可以使用今天的日期来获取它们,但是如何添加从 001 到 999 结尾的自定义 4 位数字
我正在使用 sql 来存储发票编号
如果您每月最多只有 999 张发票,您可能不必担心快速连续两张发票所涉及的低效率问题,因此您需要分别生成一张发票:
- 找出要使用的前缀(注意这里的时区...)
- 通过查询找到最高的发票 ID,以查找以您的前缀开头的所有发票 ID(如果您使用的是数字类型,则在可能的最小值和最大值之间),按 ID 排序(降序),只取第一个一个 1
- 解析并加一生成新的ID
- 尝试插入具有给定 ID 的新发票
- 如果您违反约束条件(重复 ID),请重新执行该过程
如果您必须处理 很多 的发票,这些发票可能来自许多不同的客户,并且不需要连续的发票 ID,您可以使用 lo/hi algorithm每个客户端有效 "reserving" 个 ID。不过,对于这种情况,这听起来有点矫枉过正。
哦,如果一个月内 超过 999 张发票,你应该弄清楚你想要发生什么...
1 你可能会在这里避免过滤,并假设其他一切都将遵循相同的约定,但我个人会过滤
如果您想在 SQL 服务器端执行此操作,您需要在 sql 服务器中创建一个 SEQUENCE
对象,您可以执行类似 ..
序列
CREATE SEQUENCE dbo.GetInvoiceNumber
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 999
CYCLE
CACHE 10
;
SQL 服务器调用
SELECT CONVERT(VARCHAR(4), GETDATE(), 12)
+ RIGHT('0000'
+ CAST( NEXT VALUE FOR dbo.GetInvoiceNumber AS VARCHAR(3)),4)
结果
查询将 return 值如
15080001
15080002
15080003
15080004
.......
注意
您确定您的客户在一个月内不会开出超过 999 张发票吗?我认为这个数字应该相当高以防万一。
我必须生成像 YYMM#### 这样的发票编号 YY 和 MM 很容易,我们可以使用今天的日期来获取它们,但是如何添加从 001 到 999 结尾的自定义 4 位数字 我正在使用 sql 来存储发票编号
如果您每月最多只有 999 张发票,您可能不必担心快速连续两张发票所涉及的低效率问题,因此您需要分别生成一张发票:
- 找出要使用的前缀(注意这里的时区...)
- 通过查询找到最高的发票 ID,以查找以您的前缀开头的所有发票 ID(如果您使用的是数字类型,则在可能的最小值和最大值之间),按 ID 排序(降序),只取第一个一个 1
- 解析并加一生成新的ID
- 尝试插入具有给定 ID 的新发票
- 如果您违反约束条件(重复 ID),请重新执行该过程
如果您必须处理 很多 的发票,这些发票可能来自许多不同的客户,并且不需要连续的发票 ID,您可以使用 lo/hi algorithm每个客户端有效 "reserving" 个 ID。不过,对于这种情况,这听起来有点矫枉过正。
哦,如果一个月内 超过 999 张发票,你应该弄清楚你想要发生什么...
1 你可能会在这里避免过滤,并假设其他一切都将遵循相同的约定,但我个人会过滤
如果您想在 SQL 服务器端执行此操作,您需要在 sql 服务器中创建一个 SEQUENCE
对象,您可以执行类似 ..
序列
CREATE SEQUENCE dbo.GetInvoiceNumber
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 999
CYCLE
CACHE 10
;
SQL 服务器调用
SELECT CONVERT(VARCHAR(4), GETDATE(), 12)
+ RIGHT('0000'
+ CAST( NEXT VALUE FOR dbo.GetInvoiceNumber AS VARCHAR(3)),4)
结果
查询将 return 值如
15080001
15080002
15080003
15080004
.......
注意
您确定您的客户在一个月内不会开出超过 999 张发票吗?我认为这个数字应该相当高以防万一。