2014-10-03 3 views
0

У меня есть строка (ы) -подстроку справа от символа SQL

CO_CS_SV_Integrate_WP_BalancingCostRiskandComplexityinYourDRStrat_Apr-Jun

Или

CO_CS_SV_CommVaultTapSponsorship_WP_GartnerNewsletterSmartIdeaforBigData_Jan-Мар

Или

CO_CS_IA_eMedia_WP_Top5eDiscoveryChallengesSolved_Apr-июнь

Мне нужно получить имя актива, связанное с кампанией, которая находится в названии кампании. Так, например, «Баланс риска дороговизны и сложности в вашем DR Strat» бы актив, связанный с первым campaign-

«CO_CS_SV_Integrate_WP_ BalancingCostRiskandComplexityinYourDRStrat _Apr-Jun»

То есть моя цель. Я хочу получить именно это из строки («Балансировка риска затрат и сложность в вашей DR-Strat». Но я не вижу, как изгнать актив из названия кампании. Это не соответствует позиции или чему-либо еще? ?? Я думаю, что я могу идти с правой стороны и и найти вторую «_» Но я не знаю синтаксис я получить как -.

выберите campaign.name , Right (campaign.name , CHARINDEX ('_', REVERSE (campaign.name))) в качестве теста от кампании

, который дает мне - _Apr-июнь

Любая помощь или руководство были бы оценены

Спасибо.

+0

Используйте 2 charindexes получить последний «_» , и до этого, очевидно, на REVERSE строки, как у вас. Затем используйте SubString, чтобы получить текст между двумя, а затем снова нажмите REVERSE, чтобы поместить его в правильном порядке. –

+0

Спасибо, вкладка. Я попробую. Я могу вернуться и попросить о помощи по синтаксису. – BeRye

ответ

1

Вы можете создать скалярную функцию, которые принимают строку, как следующее:

CREATE FUNCTION myFunction 
(
@str varchar(300) 
) 
RETURNS varchar(300) 
AS 
BEGIN 

declare @reverse varchar(200),@idx1 int,@idx2 int 

set @reverse = reverse(@str) 

set @idx1 = CHARINDEX('_',@reverse) 

set @idx2 = CHARINDEX('_',@reverse,@idx1+1) 

return reverse(substring(@reverse,@idx1+1,@[email protected])) 

END 

Вы можете попробовать следующий пример:

select dbo.myFunction('CO_CS_SV_Integrate_WP_BalancingCostRiskandComplexityinYourDRStrat_Apr-Jun'); 
+0

Спасибо. У меня нет разрешения на создание функций на сервере. – BeRye

+0

Если у вас нет разрешения на создание функции, вы можете использовать следующее выражение в своем запросе: select reverse (substring (reverse (campaign.name), CHARINDEX ('_' , обратный (campaign.name)) + 1, CHARINDEX ('_', обратный (campaign.name), CHARINDEX ('_', обратный (campaign.name)) + 1) -CHARINDEX ('_', обратный (кампании .name)) - 1)) как тест из кампании – lombardo

+0

Спасибо. Я думаю, это то, что я пытаюсь сделать. Однако, когда я запускаю код, я получаю синтаксическую ошибку - я пытаюсь понять, почему, но не могу понять это. "substring требует 3 аргумента" Похоже, подстрока передается 3 аргументами? – BeRye

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