Извлечение символов в SQL SERVER 2005? - PullRequest
0 голосов
/ 11 января 2010

Какой самый лучший способ extracting the values from vvv.www.xxx.yyy.zzz

Обратите внимание, что vvv или www, или xxx, или yyy, или zzz могут варьироваться , т.е. они могут быть любой длины.

По этой причине я не могу использовать substring with charindex.

Я не хочу делать это с LOOP или CURSOR. С помощью CTE и таблицы номеров это тоже можно сделать, но это будет немного длинная программа.

Любая простая однострочная программа предназначена для того же.

Желаемый результат будет

Col1 Col2 Col3 Col4 Col5

vvv  www  xxx   yyy   zzz

Это наше задание

Спасибо

1 Ответ

0 голосов
/ 11 января 2010

Вы можете использовать SUBSTRING с CHARINDEX, это займет немного больше работы:

declare @s as varchar(25)
set @s = 'vvv.www.xxx.yyy.zzz'
select 
left(@s, charindex('.', @s) - 1) as col1,
substring(@s, charindex('.', @s) + 1, charindex('.', @s, charindex('.', @s) + 1) - charindex('.', @s) - 1) as col2,
substring(@s, charindex('.', @s, charindex('.', @s) + 1) + 1, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) - charindex('.', @s, charindex('.', @s) + 1) - 1) as col3,
substring(@s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1, charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1) - charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) - 1) as col4, 
right(@s, len(@s) - charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1)) as col5

Вы можете очистить это с помощью соединения следующим образом:

declare @s as varchar(25)
set @s = 'vvv.www.xxx.yyy.zzz'
select left(@s, first - 1) as col1,
    substring(@s, first + 1, second - first - 1) as col2,
    substring(@s, second + 1, third - second - 1) as col3,
    substring(@s, third + 1, fourth - third - 1) as col4,
    right(@s, len(@s) - fourth)
from (select @s s) a
inner join
(
    select charindex('.', @s) as first,
    charindex('.', @s, charindex('.', @s) + 1) as second,
    charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) as third,
    charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1) as fourth
) b on 1=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...