Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите как вырезать из строки  [new]
verbatium80
Member

Откуда:
Сообщений: 1
Есть строка

http://www.google.ru/#hl=ru&newwindow=1&output=search&sclient=psy-ab&q=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&oq=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&gs_l=hp.1.2.0l4.3945.8944.0.10974.8.5.0.3.3.0.164.721.0j5.5.0...0.0.e1_6FIZg2rg&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=eef43a2dc8010583&biw=1366&bih=646

как вырезать из нее кусок
%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C
, т.е. вначале обрезать слева до первого % , а потом справа до первого &.

Заранее спасибо.
10 июл 12, 01:50    [12842036]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как вырезать из строки  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
declare @str varchar(1000) = 'http://www.google.ru/#hl=ru&newwindow=1&output=search&sclient=psy-ab&q=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&oq=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&gs_l=hp.1.2.0l4.3945.8944.0.10974.8.5.0.3.3.0.164.721.0j5.5.0...0.0.e1_6FIZg2rg&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=eef43a2dc8010583&biw=1366&bih=646'

select @str = substring( @str, charindex( '%', @str ), 1000 )
select left ( @str, charindex( '&', @str ) - 1 )
10 июл 12, 07:06    [12842271]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как вырезать из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
DECLARE @S VARCHAR(1000)='http://www.google.ru/#hl=ru&newwindow=1&output=search&sclient=psy-ab&q=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&oq=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&gs_l=hp.1.2.0l4.3945.8944.0.10974.8.5.0.3.3.0.164.721.0j5.5.0...0.0.e1_6FIZg2rg&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=eef43a2dc8010583&biw=1366&bih=646';

SELECT LEFT(S,CHARINDEX('&',S)-1) FROM (SELECT STUFF(@S,1,CHARINDEX('%',@S)-1,''))T(S);
10 июл 12, 09:25    [12842569]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как вырезать из строки  [new]
qwerty112
Guest
declare @str varchar(max)
declare @xml xml

set @str = 'http://www.google.ru/#hl=ru&newwindow=1&output=search&sclient=psy-ab&q=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&oq=%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C&gs_l=hp.1.2.0l4.3945.8944.0.10974.8.5.0.3.3.0.164.721.0j5.5.0...0.0.e1_6FIZg2rg&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=eef43a2dc8010583&biw=1366&bih=646'
set @xml = cast('<row url="'+replace(replace(replace(@str, '&', '" '), '#', '" '), '=', '="')+'" />' as xml)

select x.r.value('@q', 'varchar(100)')
from @xml.nodes('row') as x(r)

----------------------------------------------------------------------------------------------------
%D0%B2%D1%8B%D1%80%D0%B5%D0%B7%D0%B0%D1%82%D1%8C
10 июл 12, 10:14    [12842809]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как вырезать из строки  [new]
user89
Member

Откуда:
Сообщений: 2083
iap,

здесь интересная конструкция
SELECT LEFT(S,CHARINDEX('&',S)-1) FROM (SELECT STUFF(@S,1,CHARINDEX('%',@S)-1,''))T(S);

Правильно ли понимаю, что это вычисляется один раз и ускоряет выборку?

Или это более короткий вариант
select LEFT(STUFF(@S,1,CHARINDEX('%',@S)-1,''),CHARINDEX('&',STUFF(@S,1,CHARINDEX('%',@S)-1,''))-1)
???
10 июл 12, 10:32    [12842943]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как вырезать из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
user89
iap,

здесь интересная конструкция
SELECT LEFT(S,CHARINDEX('&',S)-1) FROM (SELECT STUFF(@S,1,CHARINDEX('%',@S)-1,''))T(S);

Правильно ли понимаю, что это вычисляется один раз и ускоряет выборку?

Или это более короткий вариант
select LEFT(STUFF(@S,1,CHARINDEX('%',@S)-1,''),CHARINDEX('&',STUFF(@S,1,CHARINDEX('%',@S)-1,''))-1)
???
По-моему, просто более короткий вариант. Писать меньше.
Однако, будет ошибка, если ни процента, ни амперсанда в строке не будет.
Более крутая модификация:
SELECT LEFT(S,NULLIF(CHARINDEX('&',S),0)-1) FROM (SELECT STUFF(@S,1,NULLIF(CHARINDEX('%',@S),0)-1,''))T(S);
10 июл 12, 10:46    [12843089]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как вырезать из строки  [new]
user89
Member

Откуда:
Сообщений: 2083
iap,

ОК.
10 июл 12, 10:51    [12843120]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить