最近使用query函數想要做出類似sql語法的like或是in的功能,用chatgpt找到2個解法。
使用場景建議:
如果您的篩選條件較為簡單,例如只需要檢查某列是否包含一段文字,建議使用 CONTAINS。
如果您需要更精確或複雜的匹配條件(如多個關鍵字、特定格式),建議使用 MATCHES。
我用之前的英文題庫做給大家看。
=QUERY(A:C,"select * where C contains 'act' ")
=QUERY(A:C,"select * where A MATCHES '(2|3)' ")
=QUERY(A:C,"select * where C MATCHES '(act|aim)' ")
00:00 1.說明
01:01 2.MATCHES功能
01:55 3.contains功能
02:26 4.兩者差異
02:59 5.contains實作
03:51 6.MATCHES實作
05:09 7.MATCHES跟join配合
英文單字測驗
https://docs.google.com/spreadsheets/d/1KMUUBzi-4sbW2Qrzeoc75PetNbNogJXRoSurz2ChvZM/copy
開頭 (0:00 - 0:09)
自我介紹 (彰化一整天的Blog站長) 主題說明:介紹 Google Sheets QUERY 函數中 MATCHES 和 CONTAINS 的不同。
動機與背景 (0:09 - 0:20) 近期使用 QUERY 時,想實現類似 SQL 語法中的 LIKE (模糊比對) 或 IN (多重條件) 的功能。 透過 ChatGPT 找到兩種解法:CONTAINS 和 MATCHES。
使用場景建議 (ChatGPT 建議) (0:20 - 0:41) CONTAINS: 適用時機:篩選條件較簡單,例如只需檢查某欄位是否 包含 一段文字。 範例:QUERY(A:C,"select * where C contains 'act'", )
MATCHES: 適用時機:需要更精確或複雜的匹配條件,例如使用多個關鍵字 (OR 條件)、特定格式、正則表達式。 範例:QUERY(A:C,"select * where A MATCHES '(2|3)'", ) (數字匹配) 範例:QUERY(A:C,"select * where C MATCHES '(act|aim)'", ) (文字 OR 匹配)
理論說明 (參考 ChatGPT) (0:44 - 2:28) 詳解: 作用:使用「正則表達式 (Regular Expression)」進行匹配。 功能:可處理更複雜的模式,匹配多個字母、數字、特定格式。 特點: 支援正則表達式語法。 可用 | (管道符號) 實現 OR 條件 (例如 act|aim)。 適合處理更靈活和高級的篩選需求。
範例說明 (act|aim, act.*)
詳解: 作用:用作簡單的「子字串」匹配。 功能:檢查某列儲存格是否 包含 指定的子字串。 特點: 僅檢查是否存在特定文字。 不支援正則表達式。 更直觀,適合處理簡單的篩選條件。
範例說明 (act)
主要差異總結 (表格呈現):比較特性、靈活性、用途。
實作演示 (Google Sheets) (2:52 - 6:46) 實作 (3:26) 公式:=QUERY(A:C,"select * where C contains 'act'", 0) 結果分析:會找出所有 包含 "act" 的字串 (如 act, active, actor, actress)。
實作 (數字 OR) (4:01) 公式:=QUERY(A:C,"select * where A MATCHES '(2|3)'", 1) (影片中僅說明,未直接演示此數字範例) 結果分析:找出 A 欄完全等於 2 或 3 的資料。
實作 (文字 OR) (4:27) 公式:=QUERY(A:C,"select * where C MATCHES '(act|aim)'", 0) 結果分析:只會找出 完全符合 "act" 或 "aim" 的資料。 強調 MATCHES 預設是完全匹配。
進階應用 (搭配 (5:07) 目的:讓篩選條件可以來自儲存格範圍,方便修改。 方法: 使用 JOIN("|", G1:G2) 將儲存格內容以 | 符號串接起來 (例如產生 allow|aim)。 將串接結果用 & 符號嵌入 MATCHES 的條件字串中。
公式:=QUERY(A:C,"select * where C MATCHES '(" & JOIN("|",G1:G2) & ")'", 0) 優點:可動態更改 G1, G2 儲存格內容來改變篩選條件。
結語 (6:46 - 6:49) 總結本次教學內容。 感謝觀看。