① sql语句自动匹配两个表两个字段内容相似的记录
看样子像搜索引擎用到的。这种模糊匹配没有限制的话太难了,纯用sql我不知道怎么实现
不过有两个函数或许能帮上忙,substr和instr。不知道你是什么数据库不知道有不。
我觉得要实现这个要结合高频词一起使用。
首先将a.A1看做搜索引擎的输入词,然后匹配高频词,进行截断“我爱” “你” 然后进行模糊匹配之类的。
我也不知道你要表达的是不是我理解的,见笑了
② sql 匹配相似记录
不知道你的相似度判断的规则是什么,通过数据库实现的话,可以考虑定义一个相似度比较函数,然后在update时调用并判断,下面是MSSQL的思路,不过需要把相似度判断的函数写完整。
其他数据库应该也可以用相同思路来做吧。
FUNCTION fn_GetSimilar
(
@strA As Varchar(255), --传入的待比较的字符
@StrB As Varchar(255 --期望字符
)
RETURNS int
AS
BEGIN
DECLARE @Result int;
if @strA= @StrB
begin
set @Result=100
end
----
--相似度判断条件及判断方法赋值
----
RETURN @Result
END
如果函数测试没问题,就可以调用下面的方法来修改了
update 不规则名称表 set StdMedName=b.CommonName from 标准名称表 b
where dbo.fn_GetSimilar( 不规则名称表.IrrMedName,b.CommonName)>相似度的值
③ sql怎么查询一列数据的相似度
with t as (select 'xspasdfdfsdfz,xpaysdfsdss,xparsdfd' a from al)
selectsubstr(y.a,1,x.lvl-1) returnvalue from (selectdistinct(lvl) lvl from (select rn,first_value(lvl) over(orderby lvl) lvl,cnt from (select rn,lvl,count(distinct(str)) cnt from (select rn,level lvl,substr(str,1,level) as str from (select rn,str from (select rn,regexp_substr(a,'[^,]+',1,level,'i') as str from (selectrownum rn,a from t) connectby
level<=length(a)-length(regexp_replace(a,',',''))+1)) connectbylevel<=length(str)) groupby rn,lvl orderby lvl asc) where cnt<>1)) x leftjoin t y on1=1;
RETURNVALUE
--------------------------------------------------------------------------------
x
SQL> with t as (select 'xxxxasdfdfsdfz,xxxxxysdfsdss,xxxxxxxxsdfd' a from al)
select substr(y.a,1,x.lvl-1) returnvalue from (select distinct(lvl) lvl from (select rn,first_value(lvl) over(order by lvl) lvl,cnt from (select rn,lvl,count(distinct(str)) cnt from (select rn,level lvl,substr(str,1,level) as str from (select rn,str from (select rn,regexp_substr(a,'[^,]+',1,level,'i') as str from (select rownum rn,a from t) connect by
3 level<=length(a)-length(regexp_replace(a,',',''))+1)) connect by level<=length(str)) group by rn,lvl order by lvl asc) where cnt<>1)) x left join t y on 1=1
4 ;
RETURNVALUE
--------------------------------------------------------------------------------
xxxx
这个例子 'xxxxasdfdfsdfz,xxxxxysdfsdss,xxxxxxxxsdfd' 是把这些放在一行里面 如果是一列数据 可以把列转成行
SQL> select * from tt;
ID NAME
---------- ------------------------------
1 aab
1 aac
2 ddca
2 ddcp
2 ddco
SQL> select id,wm_concat(name) newstr from tt group by id;
ID NEWSTR
---------- --------------------
1 aab,aac
2 ddca,ddco,ddcp
这样把最上面的SQL写成函数,直接用函数来处理各分组里面相似度
④ sql 怎么查询与条件80%相似的数据
SQL> create table ttb(name varchar2(10));
Table created.
SQL> insert into ttb values('asdfjkl');
1 row created.
SQL> insert into ttb values('asdkb');
1 row created.
SQL> insert into ttb values('asd323s');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from ttb;
NAME
------------------------------
asdfjkl
asdkb
asd323s
SQL> select wm_concat(name) from ttb;
WM_CONCAT(NAME)
asdfjkl,asdkb,asd323s
SQL> with t as (select to_char(wm_concat(name)) a from ttb) select substr(y.a,1,x.lvl-1) returnvalue from (select distinct(lvl) lvl from (select rn,first_value(lvl) over(order by lvl) lvl,cnt from (select rn,lvl,count(distinct(str)) cnt from (select rn,level lvl,substr(str,1,level) as str from (select rn,str from (select rn,regexp_substr(a,'[^,]+',1,level,'i') as str from (select rownum rn,a from t) connect by level<=length(a)-length(regexp_replace(a,',',''))+1)) connect by level<=length(str)) group by rn,lvl order by lvl asc) where cnt<>1)) x left join t y on 1=1;
RETURNVALUE
⑤ sql 查询一个表内某一字段相似数据
可以用like模糊查询:
select*fromAwherechecklike'我是中国人我来自%'
⑥ SQL中 如何搜索‘关键词’
select列1,列2,列3from表名wherenamelike'%关键词%'
name like '%关键词%' 表是 name包含"关键词"3个字。%表示通配符,表示任何字符都适用。
a,like '关键词%' 表示以关键词开头的内容
b,like '%关键词' 表示以关键词结尾的内容
c,like '关键词' 等同于 ='关键词' 的写法,即name是关键词的,你的写法是这样
d,like '%关键词%丽%' 表示like可以包含多个%的通配符
⑦ SQL中可以实现多个关键词匹配的搜索功能吗
explode把用户输入的关键词拆分成数组,然后$str = implode("%' or like '%",array);
然后$sql = "select * from table where name like '%".$str."%'";
当然你explode之前要先处理返回的关键词字符串,去掉多余的空格和符号
⑧ 如何用SQL找出两两相似的数据
如何用SQL找出两两相似的数据
SELECT Name1 AS 姓名,Money1 AS 工资,'缺失' AS 状态 FROM
(SELECT * FROM A left JOIN B ON A.NAME1=B.NAME AND A.Money1=B.Money) AS tb
WHERE Name IS NULL
UNION ALL
SELECT NAME,Money,'失败' FROM B WHERE Money=0
⑨ 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' 。
⑩ Mysql如何查询和字段中某个字或词相同的关键字
用模糊查询,下述为转载:
SQL模糊查询的语法为
“SELECT
column
FROM
table
WHERE
column
LIKE
';pattern';”。
SQL提供了四种匹配模式:
1.
%
表示任意0个或多个字符。如下语句:
SELECT
*
FROM
user
WHERE
name
LIKE
';%三%';
将会把name为“张三”,“三脚猫”,“唐三藏”等等有“三”的全找出来;
2.
_
表示任意单个字符。语句:
SELECT
*
FROM
user
WHERE
name
LIKE
';_三_';
只找出“唐三藏”这样name为三个字且中间一个字是“三”的;
SELECT
*
FROM
user
WHERE
name
LIKE
';三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;
3.
[
]
表示括号内所列字符中的一个(类似与正则表达式)。语句:
SELECT
*
FROM
user
WHERE
name
LIKE
';[张李王]三';
将找出“张三”、“李三”、“王三”(而不是“张李王三”);
如
[
]
内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT
*
FROM
user
WHERE
name
LIKE
';老[1-9]';
将找出“老1”、“老2”、……、“老9”;
如要找“-”字符请将其放在首位:';张三[-1-9]';
4.
[^
]
表示不在括号所列之内的单个字符。语句:
SELECT
*
FROM
user
WHERE
name
LIKE
';[^张李王]三';
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
SELECT
*
FROM
user
WHERE
name
LIKE
';老[^1-4]';
将排除“老1”到“老4”寻找“老5”、“老6”、……、“老9”。
!最后是重点!
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”、“';”的语句无法正常实现,而把特殊字符用“[
]”括起便可正常查询。据此我们写出以下函数:
function
sqlencode(str)
str=replace(str,"';","';';")
str=replace(str,"[","[[]")
';此句一定要在最先
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end
function