mysql 進行模糊查詢時,可使用內部函式 instr,替代傳統的 like 方式,並且速度更快。
instr(field, str) 函式,第乙個引數 field 是字段,第二個引數 str 是要查詢的串,返回串 str 的位置,沒找到就是0
先看以前用like方式的**:
"querylist" parametertype=
"com.ccb.inm.system.uass.entity.sysdatagroup" resultmap=
"sysdatagroupresultmap"
>
"selectsysdatagroup"
/>
<
if test=
"datagroupname != null and datagroupname != ''"
>
and data_group_name like concat
('%'
, #,
'%')
>
<
if test=
"datagroupalias != null and datagroupalias != ''"
>
and data_group_alias like concat
('%'
, #,
'%')
>
<
if test=
"enabled != null"
>
and enabled = #
>
<
if test=
"begintime != null"
>
<
!-- 開始時間檢索 --
>
and date_format
(create_time,
'%y%m%d'
)>
=date_format(#,
'%y%m%d'
)>
<
if test=
"endtime != null"
>
<
!-- 結束時間檢索 --
>
and date_format
(create_time,
'%y%m%d'
)<
=date_format(#,
'%y%m%d'
)>
<
/where>
<
/select>
這種方式使用mysql並對字段進行模糊搜尋時,如果系統對欄位的字元沒有做到限制,就會經常出現使用者輸入下劃線『』、百分號『%』此類萬用字元進行搜尋,如此執行往往會檢索到錯誤的結果集,下滑線『』會匹配單個任意字元,百分號『%』會匹配任意個任意字元。
解決方案
一,使用instr替換like
instr不會識別萬用字元,只會判斷第二個字串引數在第乙個字串中是否存在。確保此論是有據可依的,上官網。
select * from sys_data_group where instr
(data_group_name,
"%")
;
二,使用轉義字元『\』
'%'會被轉義為『%』,同理『_』會被轉義為『_』,在你的程式語言過濾使用者輸入的值,遇到萬用字元就在前面填上『\』
三,使用escape轉義
使用(這個用的不熟,暫且舉個例子吧)
示例
這種寫法的含義是字元『/』後面的字元都被當成是普通字元,而不再是萬用字元,這樣的做法回有問題,最後乙個『%』應該是被當做萬用字元處理才是正確的。
關於面試的一些問題
面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...
關於Labview的一些問題
第一章 虛擬儀器及 labview入門 1 虛擬儀器概述 虛擬儀器 virtual instrumention 是基於計算機的儀器。計算機和儀器的密切結合是目前儀器發展的乙個重要方向。粗略地說這種結合有兩種方式,一種是將計算機裝入儀器,其典型的例子就是所謂智慧型化的儀器。隨著計算機功能的日益強大以及...
關於DropDownList的一些問題
dropdownlist選擇後提示不能在dropdownlist選擇多項 原因在於drop.selected true 用的是item的引用,無法覆蓋上次操作 有2種方法 一種是直接drop.selectvalue value 選定指定資料 另一種是在操作前 呼叫clearselection 方法清...