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,我們下個教學見!


11.7K會員
147內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
發表第一個留言支持創作者!
喜特先生官方沙龍 的其他內容
這是「按條件算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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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)) 對於函數很熟悉