2014-09-05 2 views
0

У меня есть столбец с большими объемами текста в каждой записи. Мне нужно найти определенное слово и вернуть 50 символов перед словом и 50 символов после слова. Я использую подстроку для возврата символов после, но не могу найти способ вернуть символы перед словом.Возвращаемая подстрока до и после определенного слова

substring(RepText,(PATINDEX('certainword',RepText),50) отлично подходит для возврата текста после слова «определенное слово», но не перед словом.

Любые предложения были бы замечательными!

+0

А что ваш язык? – Larme

ответ

0

Вот пример, который печатает 2 письма до и после слова к югу

declare @st varchar(100) ='test subis good' 
select PATINDEX('%sub%', @st) 
select SUBSTRING(@st, PATINDEX('%sub%', @st) + LEN('sub'), 2), 
SUBSTRING(@st, PATINDEX('%sub%', @st) - (case when len(@st) < 2 then len(@st) else 2 end), 2) 
0

Как насчет этого? Если это помогает, пожалуйста, вверх голосовать мой ответ, чтобы я мог получить много точек и выглядеть круто :)

if schema_id(N'utility') is null 
    execute (N'create schema utility'); 
go 
if object_id(N'[utility].[get_some]' 
     , N'TF') is not null 
drop function [utility].[get_some]; 
go 
/* 
select [lead], [lag] from [utility].[get_some] (N'return_abcdeandabcde_this', N'and', 5, 5); 
select [lead], [lag] from [utility].[get_some] (N'return_a c eanda c e_this', N'and', 5, 5); 
select [lead], [lag] from [utility].[get_some] (N'return_ bcd and bcd _this', N'and', 5, 5); 
*/ 
create function [utility].[get_some] (
@input   [nvarchar](max) 
, @search  [nvarchar](max) 
, @lead_length [int] 
, @lag_length [int]) 
returns @data table (
[lead] [nvarchar](max) 
, [lag] [nvarchar](max)) 
as 
begin 
    insert into @data 
       ([lead],[lag]) 
    select substring(@input 
        , charindex(@search 
           , @input) - @lead_length 
        , @lead_length) as [lead] 
      , substring(@input 
         , charindex(@search, @input) + len(@search) 
         , @lag_length) as [lag]; 
    return; 
end; 

пойти

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