當前位置:首頁 » 編程語言 » sql兩個字元串相似
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql兩個字元串相似

發布時間: 2022-05-22 12:44:57

A. 在sql語句中,怎麼比較兩個字元串是相同的,where條件應該怎麼寫

where '字元串a'='字元串b'

B. 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,所以是對的。反之是錯。

C. 在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

D. SQL中怎麼可以判斷兩個字元串中相同的字元,字元沒有位置的限制

我幫你寫了兩個,替換串的那個寫到一半懶得寫了,你按思路繼續完成吧,已經說的很清楚了,你應該能搞定
這個是替換單個字元的
internal void ChangeWchar(/*string mStr,string findStr,string replace str*/)
{
string str="my !name is ****!";
string C1="!", C2="*", D1="*", D2="#";
string resultStr = "";
for (int i = 0; i < str.Length; i++)
{
if (string.Compare(C1, str.Substring(i,1)) == 0)
resultStr += C2;
else if (string.Compare(D1, str.Substring(i,1)) == 0)
resultStr += D2;
else
resultStr += str.Substring(i,1);
}
}
下面是替換串的
class FindReplaceStrStru
{
public int s, e;
}
internal void ChangeStr(/*自定義參*/)
{
string str = "my !name is ****!";
string C1 = "!", C2 = "*", D1 = "*", D2 = "#";//設定優先順序,若要替換的c1串中含有c2串,如:c1="12345" c2="23"
string resultStr = "";
//以c1優先為例子。
//先定義一個「碎片」數組,只為了方便說明問題而定義,實際考慮效率可去掉,並改寫函數
//此段是保存不包含優先順序1的字元串 - 段位置。
List<FindReplaceStrStru> rp2list = new List<FindReplaceStrStru>();
int sID = 0, eID = 0;
while (true)
{
eID = sID;
sID = str.IndexOf(C1, sID);
if (sID >= 0)
{
rp2list.Add(new FindReplaceStrStru());
rp2list[rp2list.Count - 1].s = eID == 0 ? 0 : eID + C1.Length;//此處若首次查找在0位置成功找到,可能會加一條無用的段,可在這這前加個判斷是否為零,若為則不加
rp2list[rp2list.Count - 1].e = sID;
sID += C1.Length;
//畫圖你就明白了如:
// |*****&&&&&****&&&*&&&&&****&&&&&|取不包含優先順序1的段。
}
else
break;
}
//if((sID)<str.Length)
//最後檢查一下,若沒有到未尾,則加上尾段。
//到此你可以你用查找單個字元的思路,用重新連接一個字元串的方式,而不是直接替換,因為要 替換的c1長度為2,但替換後的c2可能長度為3,所以會改變長度,不可直接替換,用重新連接一個新串的方法
//到此應該可以解決了,若搞不定可以留言。
}

E. sqlServer中如何比較兩個字元串相似!

把String1分解為3個單詞(book,net,job)
每個單詞到資料庫里模糊查詢:select * from t1 where f1 like '%book%'

F. sql如何高效的比對兩個字元串的相似度

如表格A中欄位a1有一條字元串記錄Rec1內容為 「我的家在哪裡?」;然後要從B表中找出一條字元串記錄Rec2內容與Rec1最相似的,如:「我的家在浙江?」 select A.a1, max(DIFFERENCE(A.a1,B.相應欄位)) from A cross join B group by A.a1

G. sql 相似字元串怎麼做

可以用LIKE來找相似字元串。
LIKE 是一個在 WHERE 子句中會用到的關鍵字。
基本上,LIKE 能讓你依據一個模板來查詢你要的結果。
LIKE 的語法如下:

SELECT "欄位名"
FROM "表格名"
WHERE "欄位名" LIKE 模板

模板例子:

'A_Z': 所有以 'A' 起頭,另一個任何值的字原,且以 'Z' 為結尾的字串。
如 'ABZ' 和 'A2Z' 都符合,而 'AKKZ' 並不符合 (因為在 A 和 Z 之間有兩個字元,而不是一個字元)。

'ABC%': 所有以 'ABC' 起頭的字串。舉例來說,'ABCD' 和 'ABCABC'。

'%XYZ': 所有以 'XYZ' 結尾的字串。舉例來說,'WXYZ' 和 'ZZXYZ'。

'%AN%': 所有含有 'AN' 這個套式的字串。舉例來說, 'I am AN old man' 。

H. SQL有字元串相似度的函數嗎

相似度有很多定義,可以寫自定義函數,sql server 還能用
CLR
【 ChinaKing (青春大概相似) 中提到: 】
: SQL里有沒有字元串相似的函數?
: 類似於php裡面的 similar_text()
: 就是給兩個字元串 得到相似度

I. SQL查詢兩個相似欄位

=null||bqmc!=null||cxmc!=null)
這樣改一下:
string str = "select * from 表 where ";
if(lxmc!=null)
{
str += " 欄位1 like '%"+lxmc+"%' or 欄位2 like '%"+lxmc+"%' or";
}
if(bqmc!=null)
{
str += " 欄位1 like '%"+bqmc+"%' or 欄位2 like '%"+bqmc+"%' or";
}
if(cxmc!=null)
{
str += " 欄位1 like '%"+cxmc+"%' or 欄位2 like '%"+cxmc+"%' or";
}

if (str.Substring(str.Length - 2).Equals("or"))
{
str = str.Substring(0, str.Length - 2);
}

這樣如果三個參數一個都沒有,那就查詢全部,如果有一個,那就判斷欄位1和欄位2是不是都有like的值,如果三個都寫了,就三個都判斷一次

J. 怎麼用sql語句來判斷兩條簡訊的相似度,也就是兩個字元串的相似度,相似度的理論是什麼

如表格A中欄位a1有一條字元串記錄Rec1內容為 「我的家在哪裡?」;然後要從B表中找出一條字元串記錄Rec2內容與Rec1最相似的,如:「我的家在浙江?」
select A.a1, max(DIFFERENCE(A.a1,B.相應欄位))
from A cross join B
group by A.a1