今天下午做的一個功能,要用到模糊查詢,欄位是description,剛開始我的寫法用的是sql中的模糊查詢語句, 但是這個有問題,只有將欄位的全部值傳入其中,才能查詢,所以不是迷糊查詢。 後來經過搜索,發現要加上一個concat欄位,要先將字元串拼接後,才能實現模糊查詢。 改成這個樣子後,模糊查詢功 ...
今天下午做的一個功能,要用到模糊查詢,欄位是description,剛開始我的寫法用的是sql中的模糊查詢語句,
但是這個有問題,只有將欄位的全部值傳入其中,才能查詢,所以不是迷糊查詢。
後來經過搜索,發現要加上一個concat欄位,要先將字元串拼接後,才能實現模糊查詢。
改成這個樣子後,模糊查詢功能實現。
在我搜索到的博客中海油別的幾種寫法,但是試驗了兩個,有一個成功,另外一個沒能實現模糊查詢,但是目前還不知道錯誤在哪裡。如果有人知道,請賜教。
他的博客地址是:http://blog.sina.com.cn/s/blog_667bef380101f2da.html
我使用的就是他所說的第一種方法:
1. sql中字元串拼接
SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');
我就是按照此方法實現了功能。
其實還有種方法:像這樣寫也行:
他的第二種方法:
2. 使用 ${...} 代替 #{...}
SELECT * FROM tableName WHERE name LIKE '%${text}%';
這個我試過之後,發現並沒有實現模糊查詢的功能,而且目前也不知道哪裡出錯了,如果有人知道請指教。
他的第三種方法:
3. 程式中拼接
Java
// String searchText = "%" + text + "%";
String searchText = new StringBuilder("%").append(text).append("%").toString();
parameterMap.put("text", searchText);
SqlMap.xml
SELECT * FROM tableName WHERE name LIKE #{text};
這個方法我沒有試過,但是還是記錄下來,以後試試
他還有第四種方法
4. 大小寫匹配查詢
SELECT * FROM TABLENAME WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'
或者
SELECT * FROM TABLENAME WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'
正確。