QUERY 函式大解析(十二):多個 OR 的進階替代寫法——MATCHES +「|」

更新於 發佈於 閱讀時間約 8 分鐘

在用 QUERY 查詢資料時,你曾遇過在 WHERE 寫很多個 OR 的狀況嗎?比如說我們有張表格,上面有各個公司的員工資料:

raw-image

我想用 QUERY 找符合以下條件的員工:

  • 行銷財務網管部門工作
  • 且任職於綠星農業藍星科技

如果用之前提到的 OR 或是 AND,我們可能會這樣寫:

=QUERY(A:F, "SELECT * 
WHERE (B = '行銷' OR B = '財務' OR B = '網管')
AND (F = '綠星農業' OR F = '藍星科技')"
)

不過中間的 OR 有點複雜以外,一直打欄位字母跟單引號也是有點麻煩。所以今天我想要介紹一個進階的做法,MATCHES 和正規表達式的「|」OR 符號來完成。先給大家聞個香:

=QUERY(A:F, "SELECT *
WHERE B MATCHES '行銷|財務|網管'
AND F MATCHES '綠星農業|藍星科技'"
)

是不是簡短有力,一目瞭然呢?

這次我會介紹:

  • 簡單介紹 MATCHES 跟正規表達式
  • 利用 MATCHES 找文字、數字、日期與時間的建議

另外這次會提到的概念會是 WHERE 的延伸,會建議對於 WHERE 有一些了解後再來看看喔!歡迎你來這複習:QUERY 函式大解析(二):WHERE

如果你想看看之前發布過的 QUERY 系列文,可以到這邊找找:QUERY 函式大解析,系列文索引




MATCHES 跟正規表達式是什麼?

按字面解釋,MATCHES 是「符合⋯⋯」的意思。它是 WHERE 的語句中,可以用正規表達式(Regular Expressions)進行搜尋的語法

至於這個「正規表達式」,你可以把它想像成一根要靠咒語發動魔力的魔杖,而它的魔力就是可以幫你搜尋擷取取代資料裡的文字。舉幾個例子:

SELECT * WHERE B MATCHES '.*ia'
SELECT * WHERE C MATCHES '[0-9]+'
SELECT * WHERE D MATCHES '\b[0-9]{2}\b'

MATCHES 後面跟著的那些咒語,就是正規表達式了。🪄

正規表達式的學問很深,但也正因為它能做到非常細緻精準的操作,它不管在程式語言或資料庫搜尋時,應用範圍都相當強大。Google 試算表也有三個函式(REGEXMATCHREGEXEXTRACTREGEXREPLACE)可以讓你用上它,喜特先生預計之後也會正式介紹它們,敬請敲碗期待。

打開這邊的試算表,一起來練習吧!




## MATCHES 'x|y|z|...'

我們這次要用的是正規表達式的眾多咒語中,一個叫做「|」半形 OR 符號的東西,寫起來像是這樣:

WHERE A MATCHES '本田|三菱|日產|馬自達'

意思是「當某資料的 A 欄是本田、三菱、日產或馬自達⋯⋯」

這語法的寫法,基本上就是指定欄位字母後,起一個單引號:

WHERE A MATCHES '

再寫上你想要列舉的項目,並用「|」隔開:

WHERE A MATCHES '本田|三菱|日產|馬自達

最後再用單引號關起來即可。

WHERE A MATCHES '本田|三菱|日產|馬自達'

你也可以搭配 NOT,代表不包含指定的項目。像是尋找不包含「本田、三菱、日產或馬自達」的項目,就可以這樣寫:

WHERE NOT A MATCHES '本田|三菱|日產|馬自達'




練習時間

找文字與數字

先看看「MATCHES 文字與數字」這張工作表。

raw-image


我們來做文章開頭提到的搜尋條件:

  • 行銷財務網管部門工作
  • 且任職於綠星農業藍星科技

我們在 H2 這邊輸入:

=QUERY(A:F, "SELECT *
WHERE B MATCHES '行銷|財務|網管'
AND F MATCHES '綠星農業|藍星科技'"
)

來看看結果:

raw-image



來試試看「尋找年齡 20、22、24、26、28 或 30 歲的員工」。這也一樣可以用 MATCHES 來解決。我們在 H23 這邊輸入:

=QUERY(A:F, "SELECT * WHERE C MATCHES '20|22|24|26|28|30'")

來看看結果:

raw-image

這樣就好了!




找日期

由於 MATCHES 後面只能接正規表達式,沒辦法直接跟日期對接,所以我們需要把日期轉換成數字,讓 MATCHES 起作用。來看看這張表:

raw-image

這是某客服中心的來電紀錄,B 欄跟 C 欄有日期和時間(以 24 小時制顯示)的資料。


尋找日期為 2024/02/01、2024/02/03、2024/03/05 這三天的資料

因為沒辦法直接拿 B 欄的日期跟 MATCHES 對接,要先做這兩件事:

  • 先透過 DATEVALUE 函式把日期轉換成數字。
  • QUERY 中,再利用 DATEVALUE 把條件裡提到的日期也換成數字,並把文字串連起來。

我們先用 DATEVALUE 把 B 欄的日期轉成數字。在 E2 寫:

=ArrayFormula(DATEVALUE(B2:B))

DATEVALUE 就會幫我們傳回這些數:

raw-image

再來用 MATCHES 查找 E 欄的值即可。我們在 G2 輸入:

=QUERY(A:E, "SELECT *
WHERE E MATCHES '" &
CONCATENATE(
TEXT("2024/02/01", 0), "|",
TEXT("2024/02/03", 0), "|",
TEXT("2024/03/05", 0))
& "'")

中間這串 CONCATENATE 會把 TEXT 函式轉換好的數字與「|」串起來,就會等同於:

=QUERY(A:E, "SELECT *
WHERE E MATCHES '45323|45325|45356'")

來看看結果:

raw-image


找時間

說到把時間轉成數字,我們可能會先想到 TIMEVALUE 函式。不過如果以 TIMEVALUE 的方式來做,會因為它容易產生小數點的關係,比較不利於 MATCHES 的查找,會容易失敗。所以我會建議用時間的濾鏡(HOUR()MINUTE()SECOND() 等)跟 MATCHES 搭配就好了!用 ANDOR 也當然沒問題

我們這邊要尋找「上午 12:00、上午 12:15、上午 12:30」這三個時間的資料。你可以看成:

HOUR(C) = 0
MINUTE(C) = 0MINUTE(C) = 15MINUTE(C) = 30

想出來 QUERY 怎麼寫了嗎?沒錯,就是:

=QUERY(A:E, "SELECT * WHERE HOUR(C) = 0 AND MINUTE(C) MATCHES '0|15|30'")


來看看執行結果:

raw-image


這樣就完成囉!

下次會再提到怎麼用 MATCHES 的「|」搭配 TEXTJOIN 與儲存格範圍連動,讓你的 QUERY 更靈活,敬請期待!




如果你喜歡這次的文章,歡迎你透過這些方法支持我:

  • 按下愛心、按下儲存
  • 留言告訴我你的想法
  • 加入喜特先生的官方沙龍,即時看到我發布的教學
  • 付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
  • 追蹤喜特先生的 Facebook
  • 這邊小額贊助我的創作!

想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!

我是喜特先生,Mr. Sheet,我們下個教學見!


留言
avatar-img
留言分享你的想法!
喜特先生 Mr. Sheet -avatar-img
發文者
2024/02/15
QUERY 函式大解析,系列文索引提及了這篇文章,趕快過去看看吧!
avatar-img
喜特先生官方沙龍
18.8K會員
153內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
2025/04/20
請你試著在 Google 試算表的儲存格上打這個,按下 Enter: =WHATTHEFOXSAY() 會有神奇的事情發生喔 ✨
Thumbnail
2025/04/20
請你試著在 Google 試算表的儲存格上打這個,按下 Enter: =WHATTHEFOXSAY() 會有神奇的事情發生喔 ✨
Thumbnail
2024/06/02
上次介紹了 REPLACE 函式,可以用來取代儲存格內的特定文字。其實我們還有一個相似的函式叫 SUBSTITUTE,也有取代的功能,不過當然有一點不一樣的地方!今天會分享語法的範例,還有跟 REPLACE 的差異在哪。一起來看看!
Thumbnail
2024/06/02
上次介紹了 REPLACE 函式,可以用來取代儲存格內的特定文字。其實我們還有一個相似的函式叫 SUBSTITUTE,也有取代的功能,不過當然有一點不一樣的地方!今天會分享語法的範例,還有跟 REPLACE 的差異在哪。一起來看看!
Thumbnail
2024/05/25
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
2024/05/25
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
接著介紹可以尋找文字的函式:FIND 跟 SEARCH。這兩個函式都會回傳指定文字第一次出現的位置,而這位置會以數字表示。
Thumbnail
接著介紹可以尋找文字的函式:FIND 跟 SEARCH。這兩個函式都會回傳指定文字第一次出現的位置,而這位置會以數字表示。
Thumbnail
網友提出的一個問題,如影片。 當輸入關鍵字+數量,例:起司+10 下拉式選單自動產生有關起司的產品的清單供選擇並且帶出規格、數量、金額與小計 《為什麼要做這個功能呢?》 當資料很多的時候,如果每筆資料都是用篩選的方式來找出想要的產品,可能會耗掉非常多的時間。 所以如果可以藉由關鍵字,
Thumbnail
網友提出的一個問題,如影片。 當輸入關鍵字+數量,例:起司+10 下拉式選單自動產生有關起司的產品的清單供選擇並且帶出規格、數量、金額與小計 《為什麼要做這個功能呢?》 當資料很多的時候,如果每筆資料都是用篩選的方式來找出想要的產品,可能會耗掉非常多的時間。 所以如果可以藉由關鍵字,
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
延伸 MATCHES「|」的 OR 字元應用,我們還可以讓它跟工作表內的範圍做連動,做出更彈性的 QUERY。一起來看看怎麼做吧!
Thumbnail
延伸 MATCHES「|」的 OR 字元應用,我們還可以讓它跟工作表內的範圍做連動,做出更彈性的 QUERY。一起來看看怎麼做吧!
Thumbnail
在用 QUERY 查詢資料時,你曾遇過在 WHERE 寫很多個 OR 的狀況嗎?有個更簡單好用的寫法推薦給你,來瞧瞧!
Thumbnail
在用 QUERY 查詢資料時,你曾遇過在 WHERE 寫很多個 OR 的狀況嗎?有個更簡單好用的寫法推薦給你,來瞧瞧!
Thumbnail
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
Thumbnail
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News