我在方格子上寫了一系列使用 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^)...
先觀察一下 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
・按這邊 小額贊助我的創作!
我是喜特先生,Mr. Sheet,我們下個教學見!