QUERY 函式大解析(十):怎麼處理有大小寫區別的資料

2022/08/07閱讀時間約 6 分鐘
今天假設有個表格長這樣:
我想找到居住地是「台北」的姓名資料,預計會得到前三列(章OO、謝OO、余OO)的值。可是,如果我們按照之前學的 WHERE 表達式,寫下:
=QUERY(資料!A:B, "SELECT A, B WHERE B = 'Taipei'")
你會得到的結果只會有一筆:
這是因為 Google QUERY 會辨識字母的大小寫(case-sensitive),只會把符合「Taipei」這個拼寫規則的資料回傳給你,其他大小寫的組合就不會回傳了。
那如果我想要無視大小寫,把居住地是「Taipei」的資料都全部回傳回來,也就是含有任何大小拼寫可能的資料回傳回來:
  • Taipei
  • TAIPEI
  • taipei
  • TaIpEi
  • tAiPeI
  • ... 等 N 個排列組合
這樣的話要怎麼辦呢?把全部拼寫的可能性一個個列出來的確是可以,但是也太麻煩了:
WHERE B = 'TAIPEI' OR B = 'TAIPEi' OR B = 'TAIPeI' OR B = 'TAIpEI'...
除了再回頭把資料整理得更好一點,我還有什麼方法嗎?——有!今天想跟你分享怎麼無視字母大小寫,照樣能執行 WHERE 語法的妙招。
如果還不熟悉什麼是 SELECT 和 WHERE 的話,歡迎你回到 QUERY 函式大解析(二):WHERE 複習一下,再過來看看喔!
我在方格子上寫了一系列使用 QUERY 的教學文章,也歡迎你來看看:

UPPER 大寫濾鏡、LOWER 小寫濾鏡

在之前的 QUERY 函式大解析(七):簡易日期時間控制術,我們提到了一種叫純量函式(Scalar Function)」的東西,簡單來說你可以把這個函式想像成一種濾鏡,把資料透過去濾鏡後就是另一種顏色或形狀。比如說:
  • 我有個資料叫 apple,用「大寫濾鏡」就可以把 apple 轉成 APPLE。
  • 我有個資料叫 TEA,用「小寫濾鏡」就可以把 TEA 變成 tea。
跟風一下~
那麼我們這次會用到的,就是這些濾鏡裡面的大寫濾鏡小寫濾鏡了,大寫的叫 UPPER()小寫的叫 LOWER()
使用的方法很簡單,只要在欄位字母放到括號裡面,就會轉換大小寫了。像是:
把回傳的 A 欄跟 B 欄轉換成大寫:
"SELECT UPPER(A), UPPER(B) ... "
把回傳的 A 欄跟 B 欄轉換成小寫:
"SELECT LOWER(A), LOWER(C) ... "
假如我們現在有這樣的資料:
用 UPPER() 把 A2 以下所有的資料轉換成大寫的話:
LOWER() 轉換成小寫,也是一樣的道理:

解法:WHERE + 濾鏡

了解上面這兩個濾鏡的運作方法後,我們離答案就越來越近了!除了 SELECT,我們也當然可以把濾鏡放在 WHERE 語句裡面:
A 欄資料一律轉換成大寫後,
只要 A 欄任何資料符合「ABC」,就把所有資料回傳:
"SELECT * WHERE UPPER(A) = 'ABC' ..."

C 欄資料一律轉換成小寫後,只要符合「xyz」,
只要 C 欄任何資料符合「xyz」,就把所有資料回傳:
"SELECT * WHERE LOWER(C) = 'xyz' ..."
換句話說,在執行 QUERY 的時候,UPPER(A) 跟 LOWER(C) 會先把搜尋範圍內的資料先一律轉換成大小寫,再跟等號後面的文字比較。
那麼,回到我們的問題,要怎麼無視大小寫,取得「Taipei」的資料?
(這裡是教學表格的「資料」工作表唷)
我們用 UPPER 濾鏡把 B 欄的資料都轉成大寫,再讓它等於「TAIPEI」,問題是不是就解決了?來寫個語法看看:
=QUERY(資料!A:B, "SELECT A, B WHERE UPPER(B) = 'TAIPEI'")
嗚喔喔喔喔,成功了!當然,如果你想要用 LOWER() 也可以,記得把後面的關鍵字也改成小寫「taipei」就好。另外經過實測後,發現幾件事:
1) WHERE 的其他搜尋方法也適用
這邊說的其他方法有 contains、starts with、ends with、match、like 這些,也都可以搭配剛剛提到的 UPPER() 和 LOWER() 的技巧。
例如,想找到含有「Taipei」的資料(例如台北跟新北,Taipei、New Taipei):
=QUERY(A:B, "SELECT * WHERE UPPER(B) contains 'TAIPEI'")
又或是以台(Tai)開頭的資料:
=QUERY(A:B, "SELECT * WHERE UPPER(B) starts with 'TAI'")
都可以成功篩選到資料的!
2) 其他有變音符號的字母(ä、ü、ö、è、ç、ž...)也適用。
3) 經實測有大小寫的字母系統都似乎可以用(拉丁字母、西里爾字母、希臘字母、科普特字母、亞美尼亞字母等),如果你發現其他文字有大小寫、卻不能用的話,歡迎跟我說!
我一樣把這次的教學試算表放在這裡,歡迎複製一份到你的雲端硬碟上,一起練習吧!

如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!
4.3K會員
136內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
發表第一個留言支持創作者!