2016-08-02 47 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

相關問題