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
14.7K會員
148內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 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
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
利用文字紀錄,明確寫下自己的採購項目......
Thumbnail
網友提出的一個問題,如影片。 當輸入關鍵字+數量,例:起司+10 下拉式選單自動產生有關起司的產品的清單供選擇並且帶出規格、數量、金額與小計 《為什麼要做這個功能呢?》 當資料很多的時候,如果每筆資料都是用篩選的方式來找出想要的產品,可能會耗掉非常多的時間。 所以如果可以藉由關鍵字,
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
無論求才或求職,都該善用獵才資源,精準鎖定關鍵人才,與顧問合作,優化履歷,建立無可取代的競爭優勢。
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
利用文字紀錄,明確寫下自己的採購項目......
Thumbnail
網友提出的一個問題,如影片。 當輸入關鍵字+數量,例:起司+10 下拉式選單自動產生有關起司的產品的清單供選擇並且帶出規格、數量、金額與小計 《為什麼要做這個功能呢?》 當資料很多的時候,如果每筆資料都是用篩選的方式來找出想要的產品,可能會耗掉非常多的時間。 所以如果可以藉由關鍵字,
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
無論求才或求職,都該善用獵才資源,精準鎖定關鍵人才,與顧問合作,優化履歷,建立無可取代的競爭優勢。
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為