1. 概述
1.1 問題描述
某些場景下,我們希望使用下拉複選框選擇多個值,按照每個值去模糊查詢,如下圖所示:
1.2 解決思路
透過 SQL 語句來處理,主要是運用 like 關鍵詞或類 like 函式,不同的資料庫處理方法不一樣,下面分別介紹。
2. 不同資料庫模糊查詢
1)Oracle 資料庫解決方案
主要使用 regexp_like() 函式來解決。建立資料查詢(使用 Oracle 資料庫內建 emp 表),SQL語句如下:
注:查詢語句中沒有%號。
2)MySQL 資料庫解決方案
MySQL 實現方式與 Oracle 類似,不同的是要使用 rlike 關鍵字,SQL語句如下:
注:查詢語句中沒有%號。
或者使用 regexp 關鍵字,SQL語句如下:
注:查詢語句中沒有%號。
3)SQL Server 資料庫及其他資料庫解決方案
SQL Server 沒有類似的關鍵字來解決,只能透過老辦法連接字串,SQL 語句如下:
注1:查詢語句中有%號。
注2:此方案不僅適用 SQL Server,也適用其他資料庫。
3. 示例
3.1 模板設計
3.1.1 資料準備
此處採用 FRDemoTW 資料庫( SQLite 資料庫)進行示範。
建立資料查詢ds1,SQL語句如下:SELECT * FROM 僱員 where 姓名 like '%${姓名}%',如下圖所示:
3.1.2 設計報表
建立普通報表,將資料集 ds1 欄位拖入 A2~F2 儲存格中,報表主體設計樣式,如下圖所示:
3.1.3 設計參數面板
1)編輯參數面板,選擇「全部新增」,將參數元件選擇下拉複選框元件,標籤元件元件值為姓名:,如下圖所示:
2)下拉複選框元件元件名為姓名,與資料查詢 ds1 中${}中的名稱一致。編輯資料字典,類型設定選擇自訂,自訂實際值、顯示值。
回傳值類型為字串,分割符為%' or 姓名 like '%。如下圖所示:
注:這裏分隔符的使用和資料庫類型有關,具體看資料庫支援的 SQL 語句和定義資料集參數的方式。如Oracle、MySQL資料庫回傳值類型可以採用 | 作為分隔符,SQL Server、SQLite資料庫回傳值類型採用 %' or 姓名 like '% 作為分隔符。
3.2 效果預覽
1)PC 端
儲存範本,點選「分頁預覽」,如下圖所示:
2)行動端
App 與 HTML5 端效果,如下圖所示:
3.3 注意事項
問題描述
儲存範本,選擇分頁預覽,勾選多個值查詢時,如果出現以下提示:
解決方案
系統開啟了 SQL 防注入,可在考慮安全後取消 or 關鍵字注入,如下圖所示:
4. 範本下載
已完成範本可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Parameter\MultiValue\下拉複選模糊查詢.cpt
點選下載範本:下拉複選模糊查詢.cpt