我在每個記錄中都有一個大量文本的列。我需要搜索某個單詞並返回單詞前面的50個字符和單詞後面的50個字符。我使用子字符串返回後面的字符,但無法找到返回字符前的字符的方法。返回某個詞前後的子串
substring(RepText,(PATINDEX('certainword',RepText),50)
適用於「確定字詞」後返回文本,但不適用於單詞之前。
任何建議將是偉大的!
我在每個記錄中都有一個大量文本的列。我需要搜索某個單詞並返回單詞前面的50個字符和單詞後面的50個字符。我使用子字符串返回後面的字符,但無法找到返回字符前的字符的方法。返回某個詞前後的子串
substring(RepText,(PATINDEX('certainword',RepText),50)
適用於「確定字詞」後返回文本,但不適用於單詞之前。
任何建議將是偉大的!
下面是一個例子,該字子
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)
這個怎麼樣前後打印2個字母?如果這會有所幫助,請投了我的答案,所以我可以得到很多分,並且看起來很酷:)
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;
去
,什麼是你的語言? – Larme 2014-09-05 20:33:54