在 SQL Server 中的一段时间结束后重置序列号
Posted
技术标签:
【中文标题】在 SQL Server 中的一段时间结束后重置序列号【英文标题】:Reset serial number after end of a period in SQL Server 【发布时间】:2019-03-15 13:52:59 【问题描述】:我正在尝试实现我在下面提到的逻辑。
财政年度从 4 月 1 日开始,到 3 月 31 日结束(明年)。在此期间,我想连续增加一个数字。但是当下一个财政年度到来时,序列号将被重置。假设如果 2019 年 3 月 31 日最后一个序列号是 PA9999,那么在 2019 年 4 月 1 日,序列号将从 PA0001 开始,依此类推。同样在 2020 年 4 月 1 日,第一个序列号将是 PA0001。这将在添加过程中发生,因此旧记录不会发生任何更改。我正在使用SQL来解决它。
实现它的最佳方法是什么?
谢谢
帕萨
【问题讨论】:
到时候使用SEQUENCE 和reset it。您可以使用多个序列并根据年份选择正确的序列 我不认为序列会起作用。序列号的一部分是静态的。我认为有一种手动方式。 将作业设置为在 4 月 1 日午夜运行以重置序列。 @Partha 在 所有 混合文本和数字的情况下,有一个函数可以将数字序列转换为混合字符串。您不能增加文本。假设PA
没有改变,一个简单的SELECT 'PA' + NEXT VALUE FOR SomeSequence
就可以了
重置意味着在添加过程中新的序列号有新的记录。我不会更改旧记录。
【参考方案1】:
试试这个:
DECLARE @tblFY TABLE
(
Id INT,
FinancialYear VARCHAR(100),
StartDate DATETIME,
EndDate DATETIME
)
INSERT INTO @tblFY(Id, FinancialYear, StartDate, EndDate)
VALUES(1,'FY - 2010','01-Apr-2010','31-Mar2011')
DECLARE @tblsales TABLE
(
Id INT,
FinancialYearId int,
SerialNumber VARCHAR(10)
)
DECLARE @yourFinancialYearId INT
SET @yourFinancialYearId = 1
INSERT INTO @tblsales(Id, FinancialYearId, SerialNumber)
VALUES(1, 1 ,'PA0001' )
SELECT NextSerialNumber = 'PA' + RIGHT('0000'+ CAST( (ISNULL(MAX(CONVERT(INT,REPLACE(SerialNumber,'PA',''))),0) + 1) AS VARCHAR(10)),4) FROM @tblsales WHERE FinancialYearId = @yourFinancialYearId
【讨论】:
以上是关于在 SQL Server 中的一段时间结束后重置序列号的主要内容,如果未能解决你的问题,请参考以下文章