2016-08-02 5 views
0

У меня есть столбец под названием batch_id со списком дат - 2016080184 ie date 2016 08 01 84 (84, я считаю, что временная часть).T-SQL: август - начало следующего года финансового года, код для динамического изменения идентификаторов партии

мне нужно обновить batch_id (varchar(25)), чтобы изменить 2017010184, основываясь на другой колонке voucher_date (datetime) = 2016-08-01 00:00:00.000

Итак, если voucher date было 2016-08-02 00: 00: 00,000, то batch_id потребности изменяться от 2016080278 к 2017010278 (78 в конце здесь не имеет значения)

августа первый месяц за финансовый год, так что август будет фактически стать январь, сентябрь станет февраль и т.д .. и год от августа требуется чтобы указать на следующий год то в этом году 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

Tank you 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 (месяц, 5, литье (left ([batch_id], 8) в качестве даты)), 112) + right ([batch_id], 2) \t \t \t, когда voucher_date> = '2016-09-01' и voucher_date <= '2016-09-30 'then' KX - '+ convert (nvarchar (8), dateadd (месяц, 5, cast (left ([batch_id], 8) в качестве даты)), 112) + right ([batch_id], 2) – user6667537

+0

Просьба пояснить правила для динамического периода даты без использования кода. – iamdave

Смежные вопросы