⑴ 在sql中兩個中文字元串怎麼判斷相似百分比
文本比較的核心就是比較兩個給定的文本之間的差異.目前,主流的比較文本之間的差異主要有兩大類.一類是基於編輯距離的,例如LD演算法.一類是基於最長公共子串的,例如Needleman/Wunsch演算法等
LD演算法又成為編輯距離演算法,他是以字元串A通過插入字元、刪除字元、替換字元變成另一個字元串B,那麼操作的過程的次數表示兩個字元串的差異
以下是SQL版本的LD演算法代碼
Create Function [dbo].[LD](@Str1 Varchar(8000),@Str2 Varchar(8000))
Returns Numeric(18,3)
As
Begin
Declare @I int
Declare @J int
Declare @A int
Declare @B int
Declare @C int
Declare @K int
Declare @Rst Numeric(18,3)
Declare @Matrix Table (i int,j int,val int)
Insert into @Matrix Values(0,0,0)
Set @i=1
While @i<=Len(@Str1)
Begin
insert into @Matrix Values(@i,0,@i)
Set @I=@I+1
End
Set @j=1
While @j<=Len(@Str2)
Begin
insert into @Matrix Values(0,@j,@j)
Set @j=@j+1
End
Set @i=1
While @I<=Len(@Str1)
Begin
Set @j=1
While @J<=Len(@Str2)
Begin
If (substring(@Str1, (Select Val From @Matrix Where i=0 And j=@j), 1) = substring(@Str2, (Select Val From @Matrix Where i=@I And j=0), 1))
Select @C =Val From @Matrix Where i=@i-1 And j=@j - 1
Else
Select @C =Val+1 From @Matrix Where i=@i-1 And j=@j - 1
Select @A =Val+1 From @Matrix Where i=@i - 1 And j=@j
Select @B =Val+1 From @Matrix Where i=@i And j=@j-1
If (@A <= @B and @A <= @C)
Insert Into @Matrix Values( @i,@j,@A)
If (@B <= @C and @B <= @A)
Insert Into @Matrix Values( @i,@j,@B)
If (@C <= @A and @C <= @B)
Insert Into @Matrix Values( @i,@j,@C)
Set @J=@J+1
End
Set @I=@I+1
End
If Len(@Str1) > Len(@Str2)
Set @K = Len(@Str1)
Else
Set @K = Len(@Str2)
Select @Rst=1-1.0*Max(Val)/@K From @Matrix Where i= Len(@Str1) And j= Len(@Str2)
return @Rst
End
⑵ SQL 如何比較兩個字元串是否完全相等
1、新建一個文件,命名為test.php。
⑶ sql 檢查 字元串 相似的記錄
字元串相似度演算法LD,你去研究下
http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html
看能滿足你的需求不,我這SQL的自定義函數
Create Function [dbo].[LD](@Str1 Varchar(8000),@Str2 Varchar(8000))
Returns Numeric(18,3)
As
Begin
Declare @I int
Declare @J int
Declare @A int
Declare @B int
Declare @C int
Declare @K int
Declare @Rst Numeric(18,3)
Declare @Matrix Table (i int,j int,val int)
Insert into @Matrix Values(0,0,0)
Set @i=1
While @i<=Len(@Str1)
Begin
insert into @Matrix Values(@i,0,@i)
Set @I=@I+1
End
Set @j=1
While @j<=Len(@Str2)
Begin
insert into @Matrix Values(0,@j,@j)
Set @j=@j+1
End
Set @i=1
While @I<=Len(@Str1)
Begin
Set @j=1
While @J<=Len(@Str2)
Begin
If (substring(@Str1, (Select Val From @Matrix Where i=0 And j=@j), 1) = substring(@Str2, (Select Val From @Matrix Where i=@I And j=0), 1))
Select @C =Val From @Matrix Where i=@i-1 And j=@j - 1
Else
Select @C =Val+1 From @Matrix Where i=@i-1 And j=@j - 1
Select @A =Val+1 From @Matrix Where i=@i - 1 And j=@j
Select @B =Val+1 From @Matrix Where i=@i And j=@j-1
If (@A <= @B and @A <= @C)
Insert Into @Matrix Values( @i,@j,@A)
If (@B <= @C and @B <= @A)
Insert Into @Matrix Values( @i,@j,@B)
If (@C <= @A and @C <= @B)
Insert Into @Matrix Values( @i,@j,@C)
Set @J=@J+1
End
Set @I=@I+1
End
If Len(@Str1) > Len(@Str2)
Set @K = Len(@Str1)
Else
Set @K = Len(@Str2)
Select @Rst=1-1.0*Max(Val)/@K From @Matrix Where i= Len(@Str1) And j= Len(@Str2)
return @Rst
End
⑷ sqlServer中如何比較兩個字元串相似!
把String1分解為3個單詞(book,net,job)
每個單詞到資料庫里模糊查詢:select * from t1 where f1 like '%book%'
⑸ pl/sql 比較兩個相似字元串,請高手支招,想了幾天都搞不定。
case when instr(A.欄位名,substr(B.欄位名,decode(instr(B.欄位名,'('),0,length(B.欄位名),instr(B.欄位名,'(')) > 0 then
'對'
else
'錯'
end
條件自己寫。
解釋一下。
decode(instr(B.欄位名,'('),0,length(B.欄位名),instr(B.欄位名,'('))
先取'('的位置。如果沒有,就是直接等於自己的長度。
然後 substr(B.欄位名,decode(。。。)
截取括弧前面的部分。
最後,再查找有沒有去掉括弧後的部分。要是有返回值就大於0,所以是對的。反之是錯。
⑹ 在SQL語句中,怎麼比較兩個字元串是相同的,where條件應該怎麼寫
where '字元串a'='字元串b'
⑺ 怎麼用sql語句來判斷兩條簡訊的相似度,也就是兩個字元串的相似度,相似度的理論是什麼
如表格A中欄位a1有一條字元串記錄Rec1內容為 「我的家在哪裡?」;然後要從B表中找出一條字元串記錄Rec2內容與Rec1最相似的,如:「我的家在浙江?」
select A.a1, max(DIFFERENCE(A.a1,B.相應欄位))
from A cross join B
group by A.a1
⑻ sql如何高效的比對兩個字元串的相似度
如表格A中欄位a1有一條字元串記錄Rec1內容為 「我的家在哪裡?」;然後要從B表中找出一條字元串記錄Rec2內容與Rec1最相似的,如:「我的家在浙江?」 select A.a1, max(DIFFERENCE(A.a1,B.相應欄位)) from A cross join B group by A.a1
⑼ SQL裡面如何計算兩列地址(中文)的相似度
相似度公式:Kq*q/(Kq*q+Kr*r+Ks*s)(Kq>0,Kr>=0,Ka>=0)設q是字元串1和字元串2中都存在的單詞的總數,s是字元串1中存在,字元串2中不存在的單詞總數,r是字元串2中存在,字元串1中不存在的單詞總數,t是字元串1和字元串2中都不存在的單詞總數。
createFUNCTION[dbo].[F_strcompare](@str1VARCHAR(8000),
@str2VARCHAR(8000))
RETURNSVARCHAR(10)
AS
BEGIN
DECLARE@iINT,
@jINT,
@kINT,
@retVARCHAR(10)
SELECT@i=MAX(strlen),
@j=MIN(strlen),
@k=0
FROM(SELECTstrlen=Len(@str1)
UNION
SELECTstrlen=Len(@str2))t
IF(@j=0)
RETURN'0'
WHILE@j>0
BEGIN
IFSubstring(@str1,@j,1)=Substring(@str2,@j,1)
SET@k=@k+1
SET@j=@j-1
END
SET@ret=Rtrim(CAST(@k*100.0/@iASNUMERIC(3,0)))
RETURN@ret
END
⑽ SQL有字元串相似度的函數嗎
相似度有很多定義,可以寫自定義函數,sql server 還能用
CLR
【 ChinaKing (青春大概相似) 中提到: 】
: SQL里有沒有字元串相似的函數?
: 類似於php裡面的 similar_text()
: 就是給兩個字元串 得到相似度