反饋已提交

網絡繁忙

模糊查询

1. 概述

1.1 應用場景

模糊查詢,是一種很方便的查詢方式,用來查詢符合某種指定格式的資料。比如用戶想查詢所有姓張的銷售員的資料,就可以使用模糊查詢。

2023-11-10_22-41-19.gif

1.2 實現思路

模糊查詢也是一種 篩選查詢,但和精准查詢不同的是模糊查詢匹配方式是模糊匹配。我們知道篩選查詢 可以透過資料集參數和範本參數兩種方法實現,那模糊查詢也就對應兩種實現方式。

  • 資料集參數:利用資料庫 SQL 語言的模糊搜尋,如 “like”、萬用字元“_”、“%”,對資料進行模糊查詢。

  • 範本參數:透過設計器的“包含”、“開頭是”、“結尾是”等不完全匹配過濾條件過濾資料。

2. 實現方法

2.1 資料集參數

資料集參數 是定義在 SQL 語句中的參數,即在 SQL 查詢資料時,就實現了資料的過濾。如果你的資料是從資料庫查詢獲得,推薦使用此方法。

2.1.1 定義資料集參數

透過資料集參數實現模糊查詢時,首先要根據你想要實現的模糊匹配原則和所使用的資料庫支援的 SQL 語法定義一個資料集參數。

如使用 FRDemo 中銷量表,查詢某個姓氏的銷售員的資料。FRDemo是一個 SQLite 資料庫,支援 Like 匹配的用法,所以資料集參數可以如下定義:SELECT * FROM 銷量 where 銷售員 like '%${name}%',這樣就定義了一個 name 參數,只要銷售員姓名含有 name,就會被匹配到。

如下列出了一些資料庫中常用的模糊查詢的語法,使用者可以根據實際連結的資料庫選擇使用。

符號

定義

資料庫

語句

"%"

表示任意 0 個或多個字元

SQLServer

Oracle

MySQL

Select *   from 表名 where 列名 like '%' //查詢出全部   

Select *   from 表名 where 列名 like 'x' //完全匹配查詢  

Select *   from 表名 where 列名 like '%x' //右為x,前面可以有任意位字元  

Select *   from 表名 where 列名 like 'x%' //左為x,後面可以有任意位字元  

Select *   from 表名 where 列名 like '%x%' //中間為x,左右都可以有任意位字元

注:x 支援替換為參數,例如 SELECT * FROM 銷量 where 銷售員 like '%${name}%' 

"_"

表示單個字元

SQLServer

Oracle

MySQL

Select *   from 表名 where 列名 like '_x' //右為x,前面有一位字元 

Select *   from 表名 where 列名 like '__x'  //右為x,前面有兩位字元  

Select *   from 表名 where 列名 like 'x__'  //左為x,後面有兩位字元

"[]"

表示括弧內所列字元中的一個

指定一個字元,字串或者範圍,要求所匹配物件是他們中的任意一個

注:如 [ ] 內有一系列字元( 01234、abcde 之類的)則可略寫為“0-4”、“a-e”

SQLServer

Select   * from 表名 where 列名 like '[張李王]三' //將找出“張三”,“李三”,“王三”(而不是“張李王三”) 

Select   * from 表名 where 列名 like  '老[1-9]' //將找出“老1”,“老2”,……,“老9”

Oracle

select *   from 表名 where   regexp_like(列名,'[張李王]三') //將找出“張三”,“李三”,“王三”(而不是“張李王三”)

MySQL

select *   from 表名 where   列名 rlike '[張李王]三' //將找出“張三”,“李三”,“王三”(而不是“張李王三”)

select *   from 表名 where   列名 regexp   '[張李王]三'  //將找出“張三”,“李三”,“王三”(而不是“張李王三”)

"[^]"

表示不在括弧列中的單個字元

其取值與[]相同,但它要求所匹配物件為指定字元以外的任一字元

SQLServer

Select   * from 表名 where 列名 like '[^張李王]三' //將找出不姓“張”,“李”,“王”的“趙三”,“孫三”等

Select *   from 表名 where 列名 like '老[^1-4]'  //將排除“老1”到“老4”,尋找“老5”,“老6”、…… 

Oracle

select *   from 表名 where   regexp_like(列名,'[^李王]三')  //將找出不姓“李”,“王”的“趙三”,“孫三”等

MySQL

select *   from 表名 where   列名 rlike   '[^李王]三'   //將找出不姓“李”,“王”的“趙三”,“孫三”等

select *   from 表名 where   列名 regexp   '[^李王]三' //將找出不姓“李”,“王”的“趙三”,“孫三”等

特殊字元模糊查詢

當要查詢的字串包含萬用字元的時候,可以採用下面的方法來查詢

SQLServer

用[ ]將特殊字元包含:

select *   from 表名 where 列名 like '_[%]_'

Oracle

用 escape 關鍵字將特殊字元轉義:

select *   from 表名 where 列名 like '_\%_'  escape '\'

MySQL

用\將特殊字元轉義:

select *   from 表名 where 列名 like '_\%_'

注:Access 的模糊查詢是 '?','*' ,如 :Select * from 表名 where 列名 like '*b*'

2.1.2 綁定過濾元件

2.1.1 節中已經定義好了資料集參數,如果要實現查詢就必須綁定一個元件。點選參數面板,在參數面板「組件設定」處可以看到定義的 name 參數,點選將其新增在參數面板中,根據需要選擇一個元件型別,這裡我們選擇「文字元件」。如下圖所示:

2.1.3 設計報表實現過濾

將 ds1 資料集的資料列拖到報表中,設計報表,如下圖所示:

2.1.4 效果預覽

保存範本,點選「分頁預覽」,在文字框中輸入模糊查詢的字串,也就對應著 name 參數為不同的值,則資料庫 SQL 語句就不同,這樣就實現了模糊查詢。PC 端效果如下圖所示:

2023-11-10_22-41-19.gif

App 及 HTML5 效果如下圖所示:

2023-11-10_22-46-47.gif

點選下載範本:模糊查詢簡單範例.cpt

2.2 範本參數

範本參數 實現資料篩選查詢和資料集參數不同,資料集參數是在從資料庫中查詢資料時就實現了過濾,而範本參數是將資料列新增在儲存格中後再過濾,適合內建資料集或者檔案資料集使用。

2.2.1 定義範本參數

這裡相當於提前定義好一個參數,參數可以是 範本參數全局參數系統參數。區別在於全局參數所有範本都可以用,系統參數不用再定義。若你定義了一個全局參數想要實現過濾,或者想要透過系統參數過濾,也可以參考此方法。

定義一個範本參數 name。如下圖所示:

2.2.2 綁定過濾元件

2.2.1 節中已經定義好了範本參數,如果要實現查詢就必須綁定一個元件。點選參數面板,在參數面板「組件設定」處可以看到定義的 name 參數,點選將其新增在參數面板中,根據需要選擇一個元件型別,這裡我們選擇「文字元件」。如下圖所示:

2.2.3 新增過濾條件

建立資料集,SQL 語句為:SELECT * FROM 銷量,即預設查詢銷量表中所有資料。將資料列新增到儲存格中,並設定報表樣式,如下圖所示:

這時預設是所有資料,如果要實現查詢,就必須新增過濾條件,雙擊 A2 儲存格,為其新增過濾條件。過濾條件為銷售員這一列的值包含參數 name。如下圖所示:

這樣就實現了過濾,保存範本,點選「分頁預覽」,在文字框中輸入模糊查詢的字串,也就對應著 name 參數為不同的值,則報表過濾條件不同,查詢出的資料也就不同,這樣就實現了資料模糊查詢。如下圖所示:

2.2.4 效果預覽

保存範本,效果如 2.1.4 節所示。

3. 索引

參考文檔

應用場景

效果圖

文本元件模糊查詢關鍵字高亮顯示

在對報表進行模糊查詢的時候,希望查詢出來的資料列中,高亮顯示模糊關鍵字。

2023-11-10_23-10-48.gif


下拉複選框多值模糊查詢

希望使用下拉複選框選擇多個值,按照每個值去模糊查詢

1656053120wNC5.gif



附件列表


主題: 參數應用
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙