2016-12-23 2 views
-6

Нужна помощь ребятам! Я еще не знаю, как использовать подстроку. Например, у меня есть данные, как этотКак подстроить символы в sql

+-----------+ 
+ Model + 
+-----------+    +-----------+ 
|Pal5c32gld | OUTPUT>>> | Pal5c | 
|Pal5s64slv |    | Pal5s | 
|Pal5sp32gry|    | Pal5sp | 
|Pal6e16slv |    | Pal6e | 
|PALs32ilver|    | Pals  | 
|PalSE64gold|    | PalSE | 
___________    _____________ 

ТИА!

+1

Что вы имеете в виду вы не знаете, как использовать его еще? Вы что-то пробовали? Вы читали документы? Кроме того, похоже, что вы можете просто использовать 'LEFT()' в любом случае .... – WillardSolutions

+1

@EatPeanutButter Посмотрите внимательно, это сложнее, чем просто использовать 'LEFT'. –

+0

Как левый (модель, 4)? Кажется, я не могу получить Pal5sp32gry >>>> Pal5sp –

ответ

2

Кажется, вы хотите, чтобы все символы перед первым номером после «pal_». Итак:

select left(col, patindex('%[0-9]%', substring(col, 5, 1000)) + 4) 

Если некоторые значения не имеют номер, вы можете сделать:

select left(col, patindex('%[0-9]%', substring(col, 5, 1000) + '0') + 4) 
+1

он не может получить выход «Pal5sp» –

+0

@JackyMontevirgen. , , Почему нет? –

0

FWIW и для удовольствия, протестирована на всех примерах и работ. Один показано ниже

DECLARE 
    @string VARCHAR(500) = 'Pal5'; 

SELECT 
    CASE 
     WHEN @string LIKE '%16%' 
     THEN LEFT(@string,PATINDEX('%16%',@string)-1) 
     WHEN @string LIKE '%32%' 
     THEN LEFT(@string,PATINDEX('%32%',@string)-1) 
     WHEN @string LIKE '%64%' 
     THEN LEFT(@string,PATINDEX('%64%',@string)-1) 
     WHEN @string NOT LIKE '%64%' 
      AND @string NOT LIKE '%32%' 
      AND @string NOT LIKE '%16%' 
     THEN @string 
    END; 
+0

Как насчет того, если номеров нет 16,32,64? –

+0

@JackyMontevirgen Что должно быть в этом случае? Или я должен догадаться? – smj

+0

Быстрый Я собираюсь пойти в пятницу вечером напитки: D – smj

0
DECLARE @str VARCHAR(100) 
SET @str = 'Pal5c32gld ' 

SELECT SUBSTRING(@str,0, patindex('%[16,32,64,128]%',@str)) 
2
select left(col, patindex('%[0-9]%', substring(col, 5, 1000)) + 3) from t 
+0

Этот ответ заставляет меня получить то, что я хочу! Большое спасибо! –

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