Sql сервер, как получить фрагмент из результата - PullRequest
1 голос
/ 16 ноября 2011

Можно ли получить строку фрагмента из результатов запроса LIKE?

Я не пытаюсь что-то придумать. Все, что мне нужно, это строка запроса TRIM вместе с (то есть 50) символами слева и справа от нее.

Например, если LIKE вернул

 "The quick brown fox jumps over the lazy dog"

для запроса "лиса", я хочу получить

 "brown fox jumps"

Обновление, это то, что я придумал. Вроде работает

  declare @query nvarchar(100), @str nvarchar(100), @HowManyCharsToInclude int,     @startIndex int, @endIndex int, @cutfromLeft int, @cutFromRight int
set @HowManyCharsToInclude = 10
set @str='The quick brown fox jumps over the lazy dog';
set @query = 'fox'
set @startIndex = (SELECT PATINDEX('%'+ @query+ '%', @str))
set @endIndex = (@startIndex + LEN(@query))
--set left, right cut
if(@startIndex>@HowManyCharsToInclude)
begin
set @cutfromLeft = @HowManyCharsToInclude
end
else
begin
set @cutfromLeft = @startIndex
end
--set right cut
if(LEN(@str) - @endIndex>@HowManyCharsToInclude)
begin
set @cutfromRight = @HowManyCharsToInclude
end
else
begin
set @cutfromRight = (LEN(@str) - @endIndex)
end

select  SUBSTRING(@str, @startIndex-@cutfromLeft, LEN(@query)+ @cutFromRight + @cutfromLeft)

1 Ответ

0 голосов
/ 16 ноября 2011

Чтобы ответить на вопрос: Да, это возможно: D

Ой, подождите, я должен объяснить, как ...

Использовать встроенные строковые функции Строковые функции MSFT

в сочетании с поиском позиции в результате и знанием длины результата.

так что псевдо-код что-то вроде ...

1 получить начальную позицию искомого текста в строке, если 0 больше ничего не делать (17)

2 Далее получите длину искомой строки (3)

3 получить длину всей строки результата (3x)

4 использовать подстроку для перевода символов в левую подстроку (поле, если (Результаты 1 - 50 <1, затем 1, другие результаты 1-50) для длины строки 100+ (3) </p>

Однако вся эта добавленная работа замедлит ваши результаты, вам лучше делать этот тип манипуляций вне уровня базы данных.

Регулярное выражение может работать быстрее, мне нужно подумать, как это сделать.

...