2016-08-08 2 views
0

Так вот задача:Как решить этот строковый алгоритм?

мне нужно обновить строки определенного столбца в моей таблице по образцу в примерах ниже:

  • Пример 1:
    От: texttext/21/812/21a
    Кому: texttext-21a81221

  • Пример 2:
    От: texttext/6/163/38a
    К: texttext-38a1636

"texttext" длина может варьироваться и может содержать дробную черту (/), а также.

Кроме того, блок 2 и 3 номера не могут иметь 2 цифры.

Так,

  • texttext/53/7а/a2

    должен превратиться в:

    texttext-0a207a53

Я использую SQL Server 2008.

Я благодарю т. е. ваши усилия, чтобы помочь мне.

Спасибо!

+1

Просьба представить код, который вы пробовали себя и результаты, которые вы получаете. Я бы сделал исследование функций 'SUBSTRING()', 'CHARINDEX()' и 'REPLACE()' sql. – Supersnake

+0

Мне очень понравился этот вопрос, пока я не прочитал строку «texttext». Длина может отличаться и может содержать слэши (/). «... вы абсолютно должны предоставить нам фиксированную структуру, если у вас есть какая-либо надежда на получение значимого запроса Вот. Нам нужно знать, сколько будет сокращений. –

ответ

0

Не уверен, что вы имеете в виду о block 2 and block 3 of numbers can’t have 2 digits Во всяком случае ниже должно дать вам идею,

WITH data AS 
(
    select Value, REVERSE(Value) AS ReverseValue from (values 
     ('texttext/21/812/21a'), ('texttext/6/163/38a'), ('texttext/53/7a/a2'), ('text/t/e/xt/53/7a/a2') 
    )t(Value) 
), split AS 
(
    select 
     Value, ReverseValue, 
     reverse(substring(ReverseValue, 1, P1.Pos - 1)) AS Forth, 
     reverse(substring(ReverseValue, P1.Pos + 1, P2.Pos - P1.Pos - 1)) AS Third, 
     reverse(substring(ReverseValue, P2.Pos + 1, P3.Pos - P2.Pos - 1)) AS Second, 
     reverse(substring(ReverseValue, p3.Pos + 1, len(ReverseValue))) AS First 
    from data  
     cross apply (select (charindex('/', ReverseValue))) as P1(Pos) 
     cross apply (select (charindex('/', ReverseValue, P1.Pos+1))) as P2(Pos) 
     cross apply (select (charindex('/', ReverseValue, P2.Pos+1))) as P3(Pos) 
) 
select Value, First + '-' + Forth + Third + Second AS NewValue from split 
+0

Выглядит хорошо Эрик. Теперь, как я могу запустить это из таблицы? – Richard

+0

Я пытаюсь заменить значение на мой выбор, но он не работает. 'select Value, REVERSE (Value) AS ReverseValue from (выберите myfield from mytable) t (Value), split AS ( select' – Richard

+0

Вы можете заменить на это' select myfield AS Value, REVERSE (myfield) AS ReverseValue from mytable ' – Eric

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