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

更新於 2024/04/06閱讀時間約 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
14.0K會員
147內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
喜特先生官方沙龍 的其他內容
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 AVERAGEIF 和 AVERAGEIFS。
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
一起來看看怎麼做 MIN 吧!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,會分享在 Google 試算表上簡單又實用的五種函式 SUM、AVERAGE、COUNT 與 COUNTA、MAX、 MIN ,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
來看看怎麼用 MAX 吧!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,會分享在 Google 試算表上簡單又實用的五種函式 SUM、AVERAGE、COUNT 與 COUNTA、MAX、 MIN ,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
一起看看 COUNT 跟 COUNTA 如何操作吧!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
來看看 AVERAGE 怎麼寫!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,會分享在 Google 試算表上簡單又實用的五種函式 SUM、AVERAGE、COUNT 與 COUNTA、MAX、 MIN ,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 AVERAGEIF 和 AVERAGEIFS。
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
一起來看看怎麼做 MIN 吧!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,會分享在 Google 試算表上簡單又實用的五種函式 SUM、AVERAGE、COUNT 與 COUNTA、MAX、 MIN ,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
來看看怎麼用 MAX 吧!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,會分享在 Google 試算表上簡單又實用的五種函式 SUM、AVERAGE、COUNT 與 COUNTA、MAX、 MIN ,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
一起看看 COUNT 跟 COUNTA 如何操作吧!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
來看看 AVERAGE 怎麼寫!這篇教學是喜特先生為 Google 試算表新手而寫的「聚集函式御五家」系列文之一,會分享在 Google 試算表上簡單又實用的五種函式 SUM、AVERAGE、COUNT 與 COUNTA、MAX、 MIN ,每篇都會解釋語法、並且附上一個簡單的例子讓你可以一起練習。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
POWER QUERY取得資料的方式五花八門,使用正確的方式匯入資料,可以讓資料取得與處理事半功倍哦 從表格/範圍 從檔案 從資料夾 從文字檔 從網頁 從GOOGLE SHEET 📌影片教學 直接看影片教學把各種不同抓取資料的方式學起來吧,觀看教學影片前可以
Thumbnail
📌附加與合併差異 POWER QUERY附加的另一個好朋友就是資料合併,來了解一下這兩個功能的差異。 附加 就是把多個資料來源,資料中相同標題的資料往下疊加結合再一起 合併 依據某一欄(PQ稱為資料行)的內容作為關鍵字,將其他資料來源依據相同的關鍵字把資料整合再一起。 有沒有發
Thumbnail
資料處理中日期格式是一定會遇到的一個課題,而在台灣日期又有民國年與西元年,很不幸的在EXCEL上,日期有它自己的標準設定模式,YYYY/MM/DD,如果不是依照這種格式進行輸入,那個日期就是僅供觀看不能進行任何計算。 延伸閱讀:EXCEL日期正確的輸入方式,與常見錯誤之日期格式輸入 而不盡少數的
Media query可以很複雜,但是這裡KP只談最簡單、最實用的基礎。
Thumbnail
稍微複雜一點的 query 其實代表著某些商業邏輯,若把這一段程式放到 repository 的實作層,會變成這些商業邏輯被隱藏起來了,如果有個好的描述語言,我倒覺得很好讀,也可以清楚知道背後的商業邏輯是什麼,是很好的一件事。
Thumbnail
POWER QUERY這個功能從EXCEL2016之後就內建EXCEL軟體中了,跟函數相比有涉略PQWER QUERY的人相對少很多,網路中文的相關資源也是。 但其實POWER QUERY相較於EXCEL的函數與VBA是更加容易上手的,他有完善的使用者介面,絕大部分的需求只需要滑鼠點一點就能達成,
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
資料形態一個申請日期中有多個聯絡人與相對應的MAIL,而且聯絡人都是放在同一個儲存格中並且以逗號分隔,MAIL亦同,這樣要如何把聯絡人與MAIL拆分成一個聯絡人一列的資料呢? 不囉嗦我們先來看成果,檔案下載(點我) 這麼方便的效果怎麼做的呢?其實用POWER QUERY完全不用寫任何程式就能完成了,
Thumbnail
先來看看最終成果 檔案下載,點我~ 以月分+部門進行分析的資料,無法直接用圖表繪製出以月分累加的折線圖,必須靠函數輔助才有辦法達成 其實POWER QUERY可以快速處理這個問題,而且未來數據新增時,只要點一下重新整理就能快速完成是不是超棒的! 現在就來看教學吧,2分鐘學起來~~~ 覺得分享有幫助到
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
POWER QUERY取得資料的方式五花八門,使用正確的方式匯入資料,可以讓資料取得與處理事半功倍哦 從表格/範圍 從檔案 從資料夾 從文字檔 從網頁 從GOOGLE SHEET 📌影片教學 直接看影片教學把各種不同抓取資料的方式學起來吧,觀看教學影片前可以
Thumbnail
📌附加與合併差異 POWER QUERY附加的另一個好朋友就是資料合併,來了解一下這兩個功能的差異。 附加 就是把多個資料來源,資料中相同標題的資料往下疊加結合再一起 合併 依據某一欄(PQ稱為資料行)的內容作為關鍵字,將其他資料來源依據相同的關鍵字把資料整合再一起。 有沒有發
Thumbnail
資料處理中日期格式是一定會遇到的一個課題,而在台灣日期又有民國年與西元年,很不幸的在EXCEL上,日期有它自己的標準設定模式,YYYY/MM/DD,如果不是依照這種格式進行輸入,那個日期就是僅供觀看不能進行任何計算。 延伸閱讀:EXCEL日期正確的輸入方式,與常見錯誤之日期格式輸入 而不盡少數的
Media query可以很複雜,但是這裡KP只談最簡單、最實用的基礎。
Thumbnail
稍微複雜一點的 query 其實代表著某些商業邏輯,若把這一段程式放到 repository 的實作層,會變成這些商業邏輯被隱藏起來了,如果有個好的描述語言,我倒覺得很好讀,也可以清楚知道背後的商業邏輯是什麼,是很好的一件事。
Thumbnail
POWER QUERY這個功能從EXCEL2016之後就內建EXCEL軟體中了,跟函數相比有涉略PQWER QUERY的人相對少很多,網路中文的相關資源也是。 但其實POWER QUERY相較於EXCEL的函數與VBA是更加容易上手的,他有完善的使用者介面,絕大部分的需求只需要滑鼠點一點就能達成,
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
資料形態一個申請日期中有多個聯絡人與相對應的MAIL,而且聯絡人都是放在同一個儲存格中並且以逗號分隔,MAIL亦同,這樣要如何把聯絡人與MAIL拆分成一個聯絡人一列的資料呢? 不囉嗦我們先來看成果,檔案下載(點我) 這麼方便的效果怎麼做的呢?其實用POWER QUERY完全不用寫任何程式就能完成了,
Thumbnail
先來看看最終成果 檔案下載,點我~ 以月分+部門進行分析的資料,無法直接用圖表繪製出以月分累加的折線圖,必須靠函數輔助才有辦法達成 其實POWER QUERY可以快速處理這個問題,而且未來數據新增時,只要點一下重新整理就能快速完成是不是超棒的! 現在就來看教學吧,2分鐘學起來~~~ 覺得分享有幫助到
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉