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