2013-05-22 2 views
2

У меня есть столбец с датами в формате 201201, 201202, 201203 и т.д.Заменить последние два символа в колонке

Это финансовая база данных, так есть период 13; однако периоды 12 & 13 объединены для целей отчетности.

Когда последние два символа равны 13, как заменить их на 12?

Я начал с

SELECT REPLACE(PERIOD, '13', '12') 
FROM @b_s_summary 

, но, конечно, это ухудшит с годом, когда это 2013.

Все советы с благодарностью получил.

+1

В какой базе данных? Доступные функции могут отличаться. Добавьте тег или отредактируйте свой вопрос. –

+0

IMO, вопрос «Заменить последние два символа в столбце» неверен, поскольку символы в этом случае всегда являются третьим и четвертым. –

+1

@FabianBigler: не 3-й, 4-й и 5-й. «201201» означает первый отчетный период в 2012 году. 13-й отчетный период в 2012 году будет «201213». Одна из моих самых ранних профессий профессионального программирования заключалась в написании программного обеспечения для определения акционерной стоимости для многонациональной компании Fortune 100. Количество учетных периодов варьировалось от 7 до 54 в год. (Прежде чем спросить, нет, я не могу это объяснить.) –

ответ

1

Вы можете использовать подстроки в этом случае:

SELECT REPLACE(PERIOD, SUBSTRING(PERIOD, len(PERIOD) - 1, 2), '12') 
FROM @b_s_summary WHERE PERIOD LIKE '%13' 

ли это, подходят вам, или вам нужен более динамичный подход к прошлым или будущим годам?

+0

Огромное спасибо всем, все хорошие и ценные ответы, но я могу только отметить один как «ответ». –

1

Аналогичным образом, можно использовать ПРАВО().

SELECT REPLACE(RIGHT(PERIOD,2),'13','12') 
2
declare @Periods as Table (Period VarChar(6)) 
insert into @Periods (Period) values 
    ('201212'), ('201213'), ('201312'), ('201313') 

select Period, case 
    when Right(Period, 2) = '13' then Substring(Period, 1, 4) + '12' 
    else Period end as [AdjustedPeriod] 
    from @Period 
1

Попробуйте это:

select (case when right(period, 2) = '13' then left(period, 4) + '12' else period end) 

Справедливо стандарт SQL, но некоторые базы данных может понадобиться substr() или substring() вместо right() и left().

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