① 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