A. 在SQL資料庫中怎樣實現模糊查找匹配。
使用 like
例如,查詢帶「螞蟻」的某欄位內容記錄,則如下寫語句:
select * from table where field1 like '%螞蟻%'
B. 搞定MySQL資料庫中文模糊檢索問題
在MySQL下,在進行中文模糊檢索時,經常會返回一些與之不相關的記錄,如查找“%a%”時,返回的可能有中文字元,卻沒有a字元存在。本人以前也曾遇到過類似問題,經詳細閱讀MySQL的Manual,發現可以有一種方法很方便的解決並得到滿意的結果。
例子:
希望通過“標題”對新聞汪沒頃庫進行檢索,關鍵字可能包含是中英文,如下SQL語句:
QUOTE:
select
id,title,name
from
achech_com.news
where
title
like
'%a%'
返回的結果,某些title欄位確定帶了“a”關鍵字,而有些則只有中文,但也隨之返回在檢索結果中。
解決方法,使用BINARY屬性進行檢索,如:
QUOTE:
select
id,title,name
from
achech_com.news
where
binary
title
like
'%a%'
返回的結果較之前正確,但英文字母區分大小寫,故有時在檢索如“Achech”及“achech”的結果是不一樣的。知道了困陸使用BINARY屬性可以解
決前面察拆這個問題,再看看MySQL支持的UCASE及CONCAT函數,其中UCASE是將英文全部轉成大寫,而CONCAT函數的作用是對字元進行連
接,以下是我們完全解決後的SQL語句:
QUOTE:
select
id,title,name
from
achech_com.news
where
binary
ucase(title)
like
concat('%',ucase('a'),'%')
檢索的步驟是先將屬性指定為BINARY,以精確檢索結果,而被like的title內容存在大小寫字母的可能,故先使用ucase函數將欄位內容全部
轉換成大寫字母,然後再進行like操作,而like的操作使用模糊方法,使用concat的好處是傳進來的可以是直接的關鍵字,不需要帶“%”萬用符,
將“'a'”直接換成你的變數,在任何語言下都萬事無憂了。當然你也可以這么寫:
QUOTE:
select
id,title,name
from
achech_com.news
where
binary
ucase(title)
like
ucase('%a%')
檢索的結果還算滿意吧,不過速度可能會因此而慢N毫秒。
C. 怎樣做資料庫的模糊查詢
select * from 表 where 欄位 like '%值%' --值的左滑數右兩邊帶%號,是模糊查詢該欄位所包含的數據。
如果 like '值%',值右邊帶%號,是指模糊查詢該欄位陵讓啟從值到%所包含的數據.
比如:查詢姓名為姓李的記錄,就是likt '李%',
如果 like '%李',值左邊帶%號,是指模糊查詢該欄位從%到值所尺如包含的數據。
比如:查詢名為林的記錄,就是 like '%林'
D. Mongodb資料庫的模糊搜索
模糊查詢簡介
MongoDB查詢條件可以使用正則表達式,從而實現模糊查詢的功能。模糊查詢可以使用$regex操作符或直接使用正則表達式對象。
$regex操作符的介紹
MongoDB使用$regex操作符來設置匹配字元串的正則表達式,使用PCRE(Pert Compatible Regular Expression)作為正則表達式語言。
regex操作符
{<field>:{$regex:/pattern/,$options:』<options>』}}
{<field>:{$regex:』pattern』,$options:』<options>』}}
{<field>:{$regex:/pattern/<options>}}
正則表達式對象
{<field>: /pattern/<options>}$regex與正則表達式對象的區別:
在$in操作符中只能使用正則表達式對象,例如:{name:{$in:[/^joe/i,/^jack/}}
在使用隱式的$and操作符中,只能使用$regex,例如:{name:{$regex:/^jo/i, $nin:['john']}}
當option選項中包含X或S選項時,只能使用$regex,例如:{name:{$regex:/m.*line/,$options:"si"}}
$regex操作符的使用
$regex操作符中的option選項可以改變正則匹配的默認行舉神為,它包括i, m, x以及S四個選項,其含義如下
i 忽略大小寫,{<field>{$regex/pattern/i}},設置i選項後,模式中的字母會進行大小寫不敏感匹配。
m 多行匹配模式,{<field>{$regex/pattern/,$options:'m'},m選項會更改^和$元字元的默認行為,分別使用與行的開頭和結尾匹配,而不是與輸入字元串的開頭和結尾匹配。
x 忽略非轉義的空白字元,{<field>:{$regex:/pattern/,$options:'m'},設置x選項後,正則表達式中的非轉義的空白字元將被忽略,同時井號(#)被解釋為注釋的開頭注,只能顯式位於option選項中。
s 單行匹配模式{<field>:{$regex:/pattern/,$options:'s'},設置s選項後,會改變模式中的點號(.)元字元的默認行為,它會匹配所有字元,包括換行符(\n),只能顯式位於option選項中。
使用$regex操作符時,需要注意下面幾個問題:
i,m,x,s可以組合使用,例如:{name:{$regex:/j*k/,$options:"si"}}
在設置索弓}的欄位上進行正則匹配可以提高查詢速度,而且當正則表達式使用的是前綴表脊答襲達式時,查詢速度會進一步提高,例如:{name:{$regex: /^joe/}
上面介紹的元字元可能就會讓我們在查詢的時候出現一些問題,比如有時候想要查詢出所有帶價格的模糊商品的時候用了.元字元進行模糊搜索,這時候會查詢出來全部的數據;
這個時候就需要對模糊查詢的條件進行一些操作,轉義櫻兄一下:
E. 搞定MySQL資料庫中文模糊檢索問題
在 MySQL下 在進行中文模糊檢索時 經常會返回一些與之不相關的記錄 如查找 %a% 時 返回的可能有中文字元 卻沒有a字元存在 本人以前也曾遇到過類似問題 經詳細閱讀MySQL的Manual 發現可以有一種方法很方便的解決並得到滿意的結果 例子 希望通過 標題 對新聞庫進行檢索 關鍵字可能包含是中英文 如下SQL語句
QUOTE: select id title name from achech_ news where title like %a% 返回的結果 某些title欄位確定帶了 a 關鍵字 而有些則只有中文 但也隨之返回在檢索結果中 解決方法 使用 BINARY 屬性進行檢索 如
QUOTE: select id title name from achech_ news where binary title like %a%
返回的結果較之前正確 但英文字母區分大小寫 故有時在檢索如 Achech 及 achech 的結果是不一樣的 知道了使用 BINARY 屬性可以解決前面這個問題 再看看 MySQL 支持的UCASE 及基搜 CONCAT 函數 其中 UCASE 是將英文全部轉成大寫 而CONCAT函數的作用是對字元進行連接 以下是我們完全解決後的SQL 語句
QUOTE: select id title name from achech_ news where binary ucase(title) like concat( % ucase( a ) % ) 檢索的步驟是先將屬性指定為 BINARY 以精確檢索結果 而被 like 的 title內容存在大小寫字母的可能 故先使用 ucase 函數將欄位內容全部轉換成大寫字母 然後再進行 like 操作 而 like 的操作使用模糊方法 使巧塌用 concat的好處是傳進來的可以是直接的關鍵字 不需要帶 % 萬用符 將 a 直接換成你的變數 在任何語言下都萬搏寬歷事無憂了 當然你也可以這么寫
lishixin/Article/program/MySQL/201311/29449
F. 資料庫的模糊查詢
明確的告訴你。。。就這么直接檢索不行。。。
大家不知道看明白沒有:這是用確定數據檢索不確定數據。。。不是你們說的用通配符能解決的事情。
數據檢索的本質是用模式(就是不確定數據),檢索符合模式的確定值。
確定性就是唯一性,而模式是不確定的。。。
我們輸入IG84317183的時候,這是個確定值,是唯一的。而這個唯一值可能屬於的模式是無窮的或者是數量非常巨大的
從數學上來說,怎麼可能用確定值用檢索不確定值?
就像你說的:可能是IG8?????,而這幾個問號可能的組合就有10萬。也可能是I?G8431???,或者其他。
所以很簡單,唯一可行的方法是倒過來,用你資料庫內的內容來匹配這個確定值。因為雖然模式是不確定的,但是你資料庫內儲存的是有限的確定的。
首先將你資料庫內的佔位符「?」,替換成通配符,如果「?」只可以代表一位數則替換為「_」或者「?」本身,如果一個「?」可以代表幾個字元則替換為「%」或者是「*」。因為不知道你的庫規不規范,如果是規范的不知道的位數都標識為IG8???????這種,長度也都一樣的話,可能就不用替換,因為?本身就是通配符(表示一位的)。因為不知道你用的是SQL SERVER,ORACLE還是其他的。
然後我們就可以用'IG84317183' 去 LIKE 你資料庫里的帶通配符的模式。
很簡單的語句就是:
如果有表「紙幣表」,欄位名是「紙幣號」,則:
替換為「%」的
select * from 紙幣表 where 'IG84317183' LIKE REPLACE(紙幣號,'?','%');
也可以替換為「_」的:
select * from 紙幣表 where 'IG84317183' LIKE REPLACE(紙幣號,'?','_');
如果不替換就直接:
select * from 紙幣表 where 'IG84317183' LIKE 紙幣號;
注意LIKE的兩邊跟我們平時用的是反的(一般來說是 欄位 like '某個值',現在是 '某個值' like 欄位,也就是說將欄位中的值作為通配符表達式 )。就這樣,很簡單,很簡單就能實現。只要你把道理想通。
但是,請你注意:這樣檢索出來的東西不能保證對應。還是那個道理,模式實際上是不確定的,雖然你可以資料庫中檢索出來,你就能說:
IG84???183這條數據是IG84317183 ???。在現實中肯定不能,除非你在現實中有很強的業務規則對應。否則是很危險的。
G. Mysql如何對資料庫進行模糊查詢
例子如下:SELCET * FROM T-USER U WHERE CONCAT(U.LASTNAME,U.FIRSTNAME) LIKE '%$LSP_NAME$%'
LASTNAME 欄位是姓;
FIRSTNAME欄位是名字;
H. SQL資料庫怎麼實現模糊查詢
實現的方法和詳細的操作步驟如下:
1、第一步,按「Ctrl + N」創建一個SQL查詢,如下圖所示,然後進入下一步。
I. ComboBox如何實現對資料庫模糊查詢!!!
方案1:建議你將模糊搜索的事件放到一個按鈕中執行,比如查詢,點擊後再通過SQL的like語句將結果放入combobox控制項中,這樣就行了。
方案2:你在textbox的change事件里寫模糊查詢語句,將查詢的內容實時的放入combobox控制項中即可,但是這個要根據你資料庫的具體容量來定,如果資料庫信息過於龐大,不建議這樣。