在某个单词之前和之后返回子字符串

时间:2014-09-05 20:01:57

标签: substring

我在每个记录中都有一个包含大量文本的列。我需要搜索某个单词并返回单词前50个字符和单词后50个字符。我正在使用substring返回后面的字符,但找不到在单词前返回字符的方法。

substring(RepText,(PATINDEX('certainword',RepText),50)非常适合在'词汇'之后返回文字,但不能在单词之前返回。

任何建议都会很棒!

2 个答案:

答案 0 :(得分:0)

这是一个例子,它在单词sub

之前和之后打印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)

答案 1 :(得分: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;