[英]MySql Search With Special Character
我使用MySql
從數據庫中搜索記錄為 -
SELECT * FROM tab WHERE col LIKE '%myvalue%';
這工作正常並顯示具有myvalue
所有記錄。
現在的問題是我有一些記錄,如my'value
, myva'lue
, myval-ue
和my-value
,還想在搜索中包含這些記錄。 此外,當我搜索my'value
那么它應該顯示myvalue
和my-value
。
怎么做到這一點? 任何幫助。 是否可以使用LIKE
運算符?
當您使用PHP時,如果有人使用您的搜索,您應該執行以下操作:
my'value
變為myvalue
) myvalue
變為%m%y%v%a%l%u%e%
) SELECT * FROM tab WHERE col LIKE '%m%y%v%a%l%u%e%'
任何其他解決方案都不符合您的所有要求。
SQL小提琴: http ://sqlfiddle.com/#!2/20f811/2
采用
SELECT * FROM tab WHERE col LIKE '%myvalue%' OR col LIKE '%my_value%'
下划線_
是單個字符通配符。
這個怎么樣?
SELECT * FROM tab WHERE col LIKE 'my%' OR col LIKE '%value'
這將檢查col
應該從我開始並以值結束。
因為可以有任何特殊字符和regexp不能與MySQL一起工作,我建議你通過將特殊字符替換為null然后將字符串與myvalue匹配來做你想要在PHP中實現的目標。
希望這對你有所幫助。
我完全不知道php,但可以告訴你該做些什么。
mysql = "SELECT id, col FROM tab WHERE col LIKE '%my%' OR col LIKE '%value%'";
rs = mysql.execute();
String newString = "";
while (rs.next()) {
newString = rs.getString(2);
newString = new string after replacing special characters using regexp
if (newString.equals("myvalue")) {
// your code here..... this is place what you wanted.
}
}
收到...
PHP部分
$term = str_replace('-','',str_replace(',', '', str_replace('\'', '', $term)));
MySql部分
SELECT *
FROM tab
WHERE ((REPLACE(REPLACE(REPLACE(col, '\'', ''), ',', ''), '-', '') LIKE "%$term%")
OR (col LIKE "%$term%"));
看這個演示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.