2016-08-02 67 views
0

我有一个名为batch_id的列,其中包含日期列表 - 2016080184即日期2016 08 01 84(84,我相信时间部分)。T-SQL:8月是下年度财政年度的开始,代码动态地更改批次ID

我需要更新batch_idvarchar(25))更改为2017010184的基础上,另一列voucher_datedatetime)= 2016-08-01 00:00:00.000

因此,如果voucher date是2016年8月2日00:00:00.000,那么batch_id需要从2016080278(末尾78在这里并不重要)更改为2017010278

八月是财政年度的第一个月,所以八月将有效地成为一月,九月将成为日等。与去年从8月需求指示次年即今年是2016年,因此batch_id应与2017年

下一页八月batch_id开始应注明2018等。

我收到的文件是每天总是落后使事情更加复杂。

回答

0

我有点困惑你的年度改变的要求,但是这应该给你所有你需要开始:

declare @BatchID nvarchar(10) = '2016080184' 
select convert(nvarchar(8),dateadd(month,-7,cast(left(@BatchID,8) as date)),112) + right(@BatchID,2) as NewBatchID_SameYear 
     ,convert(nvarchar(8),dateadd(month,5,cast(left(@BatchID,8) as date)),112) + right(@BatchID,2) as NewBatchID_NextYear 

您可以在一个CASE声明适用于上述日期的变化voucher_date列。

+0

坦克你iamdave我会给它一个与案件陈述 – user6667537

+0

对不起,是一个愚蠢的人,但我是这个和编程新。 \t我试图做一个案例陈述,但它的固定。有没有办法动态设置日期?请选择@Kx_Fin_batch_ref = \t \t如果voucher_date> ='2016-08-01'且voucher_date <='2016-08-31'则'KX - '+ convert(nvarchar(8),dateadd(month,5,cast (left([batch_id],8)as date)),11​​2)+ right([batch_id],2) \t \t \t when voucher_date> ='2016-09-01'and voucher_date <='2016-09-30 'then'KX - '+ convert(nvarchar(8),dateadd(month,5,cast(left([batch_id],8)as date)),11​​2)+ right([batch_id],2) – user6667537

+0

请解释不使用代码的动态日期时间规则。 – iamdave

相关问题