두 개의 UDF와 함께 검색의 조회 율 (%)을 리턴 할 수 있습니다. 예를
Select [dbo].[udf-Str-Match-Rate]('Dog,House,Custom',',','The dog house is red',' ')
반환 0.6666 들어
- 3 개 단어의 2/문구가 발견되었다.
각각
는 별개의 단어 결과
나는 또한 (이것은 선택 사항입니다)
1 UDF 혼자 서서이 될 수있는 사운 덱스를 포함 팽창 방지하기 위해 테스트 자신의 구분 할 수 있습니다 독립적으로 사용됩니다.
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
-- Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
-- Select * from [dbo].[udf-Str-Parse]('id26,id46|id658,id967','|')
Returns @ReturnTable Table (Key_PS int IDENTITY(1,1) NOT NULL , Key_Value varchar(max))
As
Begin
Declare @intPos int,@SubStr varchar(max)
Set @IntPos = CharIndex(@delimeter, @String)
Set @String = Replace(@String,@[email protected],@delimeter)
While @IntPos > 0
Begin
Set @SubStr = Substring(@String, 0, @IntPos)
Insert into @ReturnTable (Key_Value) values (@SubStr)
Set @String = Replace(@String, @SubStr + @delimeter, '')
Set @IntPos = CharIndex(@delimeter, @String)
End
Insert into @ReturnTable (Key_Value) values (@String)
Return
End
두 번째 UDF는 첫 번째
CREATE FUNCTION [dbo].[udf-Str-Match-Rate] (@SearchFor varchar(max),@SearchForDelim varchar(5),@SearchIn varchar(max),@SearchInDelim varchar(5))
-- Syntax : Select [dbo].[udf-Str-Match-Rate]('Dog,House,Custom',',','The dog house is red',' ')
Returns money
AS
BEGIN
Declare @RetVal money
;with cteSearchFor as (Select Distinct Key_Value from [dbo].[udf-Str-Parse](@SearchFor ,@SearchForDelim))
,cteSearchIn as (Select Distinct Key_Value from [dbo].[udf-Str-Parse](@SearchIn,@SearchInDelim))
,cteWordCnt as (Select Words=cast(count(*) as money) From cteSearchFor)
Select @RetVal = isnull(Count(*)/max(Words),0)
From cteSearchFor S
Join cteWordCnt W on 1=1
Join cteSearchIn C
on S.Key_Value = C.Key_Value
or Soundex(S.Key_Value) = Soundex(C.Key_Value)
Return @RetVal
END
분할에게 단어를 사용하여 채울 필요 문서 – Paparazzi
"한 물고기, 두 물고기, 붉은 물고기, 푸른 물고기"에서 "물고기"가 몇 번이나 일치합니까? 그것은 1 또는 5로 간주됩니까? _ (Four, Sir!) _ – HABO