我的客户希望根据他们正在工作的财政年度(当月4月到明年3月)为每个进入数据库的票号生成代码,并且需要将财务年份更改为0重新设置为
示例:
ID
17/18/0000001
17/18/0000002
...
18/19/0000001
18/19/0000002
...
如果财务年度存储在数据库中,例如开始结束月份和年份。我们怎么能检查这是明年的布罗达!重置数字。
答案 0 :(得分:0)
我不会尝试在内部尝试维护这样的计数器。相反,我会在查询时生成。下面的查询假定您的表确实有一个普通的自动增量计数器ID
以及该会计年度的year
int列。我们可以使用以下方法生成您想要的计数器:
SELECT
RIGHT(CONVERT(varchar(4), year), 2) + '/' +
RIGHT(CONVERT(varchar(4), year + 1), 2) + '/' +
RIGHT('0000000' +
CAST(ROW_NUMBER() OVER (PARTITION BY year ORDER BY ID) AS VARCHAR), 7)
FROM yourTable;
答案 1 :(得分:0)
客户端永远是对的。假设您有一个表
create table #trans(
id int identity(1,1),
transDate datetime
--other fields
)
--the table is filled
declare @dStart date='20160401', --start and end dates
@dEnd date='20170331' --of the first financial year
;with fy as ( -- fill following years
select 1 id, @dStart dStart, @dEnd dEnd
union all
select id+1,DATEADD(year,1,dStart),DATEADD(year,1,dEnd)
from fy
where id<5 --"majic" 5 is arbitrary
)
select dStart,dEnd,t.*,
right(cast(year(dstart) as varchar),2)+'/'+right(cast(year(dEnd) as varchar),2)+'/' -- F.Y. label
+ FORMAT( ROW_NUMBER() over(
partition by right(cast(year(dstart) as varchar),2)+'/'+right(cast(year(dEnd) as varchar),2)+'/' --restart numbering each F.Y.
order by t.id),'000000') ticket
from fy
inner join #trans t on cast(t.transDate as date) between fy.dStart and fy.dEnd
并拥有客户想要的东西 免责声明:如果删除某些数据,则会更改票证编号。