更新於 2024/04/06閱讀時間約 7 分鐘

QUERY 函式大解析(十一):LIKE

在上次的 QUERY 函式大解析(二):WHERE 提到了進階的 LIKE 可以做更細膩的條件搜尋。今天的這篇文就是要盡力徹底講解 LIKE,以及實際應用上可以怎麼執行 ♥(´∀` )人
我在方格子上寫了一系列使用 QUERY 的教學文章,也歡迎你來看看:
QUERY 函式大解析,系列文索引

LIKE

這邊的 LIKE 不是「喜歡」、而是「像是~」的意思。我們可以用 LIKE 做模糊的搜尋,給 QUERY 一個「我想找這個欄裡面所有像是...的資料」的指令。舉個例子:
  • 想找到所有開頭像是「台北」的資料 → 台北市政府、台北 101、台北車站 ...
  • 想找到所有結尾像是「茶」的資料 、綠、烏龍...
  • 想找到所有開頭像是「王」、結尾像是「明」的姓名 → ...
雖然說之前學到的 starts with、ends with 或 contains 也可以解決這樣的狀況,但 LIKE 可以更進一步做更細膩的搜尋——利用字元的長度來搜尋
打個比方,你記得有一款之前喝過的奶茶叫做「OO奶茶加...」。你知道那個名字裡,開頭有兩個字、中間是奶茶、但後面是什麼你不記得了。那麼:
  • 珍珠奶茶加椰果」、「布丁奶茶加小珍珠」就會符合條件
  • 但「奶茶」、「奶茶加珍珠」就不會,因為它們都不符合你想要搜尋的邏輯(開頭只有一個字)。
這就是 LIKE 可以做到的事,讓你可以更精準地告訴 QUERY 你想找的東西。怎麼做呢?我們得先認識兩個萬用符號,「%」(百分比符號)「_」(半形底線符號)

%:不限字元
「%」這個符號會告訴 LIKE:「我想找任何未知的字元,可以是零個、一個或是多個字元」,通常是當你不確定欄位裡資料的長度時可以使用。
舉例來說:
WHERE A LIKE 't%'
搜尋 A 欄裡,開頭是 t 的資料(跟 starts with 't' 相同)
結果:taipei、taichung、tainan、taitung ...

WHERE A LIKE '%t'
搜尋 A 欄裡,結尾是 t 的資料(跟 ends with 't' 相同)
結果:best、fast、feat、port ...


WHERE A LIKE '%taiwan%'
搜尋 A 欄裡,含有 taiwan 的資料(跟 contains 'taiwan' 相同)
結果:taiwan island、taiwanese、she is from taiwan ...

_:一個字元
而「_」這個符號會告訴 LIKE:「我想找任何未知的字元,可是它只代表一個字元」,通常是當你確定欄位裡那個未知字元的長度時可以使用。打一個底線符號就是指定一個未知字元、兩個符號就是兩個未知字元、三個符號就是三個,以此類推。
舉例:
WHERE A LIKE '_茶'
搜尋 A 欄裡,找到兩個字的資料、且第二個字是「茶」(第一個字未知)
結果:紅茶、奶茶、綠茶 ... 

WHERE A LIKE '__茶'
搜尋 A 欄裡,找到三個字的資料、且第三個字是「茶」的資料(第一、第二個字未知)
結果:水果茶、普洱茶、烏龍茶 ...

WHERE A LIKE '草莓__'
搜尋 A 欄裡,找到四個字的資料、且前兩個字是「水果」的資料(第三、第四個字未知)
結果:草莓蛋糕、草莓果凍、草莓冰沙 ...
那馬上示範幾個 LIKE 的應用方式供大家參考囉!
我把這次的教學試算表放在這邊,歡迎複製一份到你的雲端硬碟上,一起練習吧!

應用
先來看看 % 的使用方法吧。假如有張寫著班上同學的名字、跟他們喜歡的飲料的表:
姓名和飲料為隨機生成,不代表現實世界的任何人物。對,我知道有些飲料看起來很奇怪(^U^)...
姓名和飲料為隨機生成,不代表現實世界的任何人物。 對,我知道有些飲料看起來很奇怪(^U^)...
先觀察一下 B 欄的資料。它們由四個部分組成,分別是配料、茶飲、甜度、冰塊:
  • 寒天 + 青茶 + 半糖 + 少冰
  • 草莓 + 烏龍茶 + 全糖 + 微冰
  • 布丁 + 奶茶 + 全糖 + 去冰
那麼,假如今天我想找喜歡飲料裡有紅豆、且偏好微糖少冰的人有誰,我們的語法就會是:
=QUERY(A2:B, "SELECT * WHERE B LIKE '紅豆%微糖少冰'")
翻譯一下,這段 LIKE 代表我們確定:這個飲料會以「紅豆」開頭、不確定中間是什麼茶飲(也不知道字元個數)、確定是「微糖少冰」結尾的意思。
來看看執行效果:
搞定!原來那個不確定的飲料是青茶。
我們也可以把「%」跟「_」這兩種符號結合。假如今天我想找到喜歡某個「三個字的配料」加奶茶的人,那麼語法就是:
=QUERY(A2:B, "SELECT * WHERE B LIKE '___奶茶%'")
翻譯一下,這段 LIKE 就是,「想找確定前面有三個字、在那之後有奶茶、後面什麼甜度冰塊我不確定的飲料」。來看看效果:
原來那三個字是仙草凍!
最後,你也可以搭配 NOT 使用,找到指定條件外的資料。舉例來說,這次我想找到喜歡常溫奶茶以外的人有誰,語法就可以下:
=QUERY(A2:B, "SELECT * WHERE NOT B LIKE '%奶茶%常溫'")
記得把 NOT 放在欄位字母前面喔!一樣來瞧瞧效果:
如果要用 starts with、ends with、contains,可能就得搭配其他的邏輯運算(AND、OR),這麼一來事情會變得有點複雜,而 LIKE 就可以簡化這些,讓你更輕鬆地得到複雜的搜尋結果。

在工作上,我用 LIKE 的次數其實比之前更頻繁了。這不只是因為比起 starts with、ends with、contains 這些語法,我用 LIKE 可以少打好幾個字、也能達到同樣的效果,也當然是因為 LIKE 可以應付更細膩的搜尋條件,可以更精準抓到想看的資料,讓我的 WHERE 更加彈性。
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.