2017-02-16 4 views
0

Предположат, если есть строка M004US8060UfG Если первые четыре персонажа M004 то я должен удалить M004 и сохранить US8060UfG , если последний символ равен нуль т.е. M004US8060Uf0 затем удалить последний ноль и оставить только US8060UfСтроки и удерживающая для конкретных условий

+0

Как вы rath er new here (Btw: Welcome!), пожалуйста, позвольте мне дать один намек: если этот вопрос будет решен, было бы мило, отметьте приемочную проверку ниже счетчика голосов (лучшего) ответа. Это будет 1) отметить эту проблему как решение 2) облегчить для последователей, чтобы найти лучшее решение 3) платить очки для ответчика и 4) платить очки вам. Как только вы пересечете границу с 15 пунктами, вы - дополнительно - попросите проголосовать за взносы. Это SO-способ сказать спасибо. Счастливое кодирование! – Shnugo

ответ

0

Попробуйте, как это

DECLARE @t TABLE(s VARCHAR(100)) 
INSERT INTO @t VALUES('M004US8060UfG'),('M004US8060Uf0'),('SomeOther') 

SELECT Step2 
FROM @t AS t 
CROSS APPLY(SELECT CASE WHEN LEFT(t.s,4)='M004' THEN SUBSTRING(t.s,5,9999) ELSE t.s END AS Step1) AS A 
CROSS APPLY(SELECT CASE WHEN RIGHT(Step1,1)='0' THEN LEFT(Step1,LEN(Step1)-1) ELSE Step1 END AS Step2) AS B 

Результат

US8060UfG 
US8060Uf 
SomeOther 
0

Возможно простой случай будет делать (украл таблицу Shnugo в)

Примечание: Это предполагает только один последний ноль будет удален

DECLARE @t TABLE(s VARCHAR(100)) 
INSERT INTO @t VALUES('M004US8060UfG'),('M004US8060Uf0'),('SomeOther'),('Trailing0') 

Select * 
     ,NewValue = case when S like 'M004%0' then substring(S,5,len(S)-5) 
         when S like 'M004%' then substring(S,5,len(S)) 
         when S like '%0'  then substring(S,1,len(S)-1) 
         else S end 
From @t 

Возвращает

s    NewValue 
-------------- ----------- 
M004US8060UfG US8060UfG 
M004US8060Uf0 US8060Uf 
SomeOther  SomeOther 
Trailing0  Trailing 
Смежные вопросы