SQL : LIKE ไม่ได้แปลว่าชอบเสมอไป

Grassroot Engineer
2 min readDec 21, 2020

--

https://saixiii.com/database-sql-like-clause/

สำหรับบทความนี้จะแนะนำการใช้คำสั่ง LIKE ใน SQL โดยปกติ LIKE จะเป็นคำสั่งการเปรียบเทียบ ในส่วนของเงื่อนไขหลัง WHERE ซึ่งมี 2 สัญลักษณ์ที่จะเจอบ่อยๆในการใช้งานร่วมกันคือ

  • % (Percent ใช้สำหรับค้นหาตัวเลข 0, 1 หรือ หลายๆตัวก็ได้)
  • _ (Underscore ใช้สำหรับค้นหาตัวอักษรหรือตัวเลขตัวเดียว

LIKE Syntax ของมันคือ

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
https://saixiii.com/database-sql-like-clause/

ลองใช้งานกันดูได้จาก w3school นะคับ เมื่อยังไม่ได้ใส่เงื่อนไขเข้าไป จะเอา Table customers ทั้งหมดมาโชว์ดูก่อน

แค่เรียกค่าทั้งหมดจาก table มาโชว์ก่อน https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_like
  1. a% คือ ค้นหาข้อมูลที่เริ่มต้นด้วย a (ไม่สนว่าจะตัวพิมพ์เล็กหรือใหญ่นะ)
SELECT * FROM Customers
WHERE CustomerName LIKE ‘a%’;
คัดเฉพาะที่ขึ้นต้นด้วย ‘a’ เท่านั้น

2. %a คือ ค้นหาคำที่ลงท้ายด้วย a

SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
จะได้ Column “CustomerName” เฉพาะที่ลงท้ายด้วย ตัว a เท่านั้น

3. %or% แบบนี้คือ ค้นหาข้อมูลที่มีคำว่า “or” เป็นส่วนประกอบ

SELECT * FROM Customers
WHERE CustomerName LIKE '%or%'
จะได้ column “CustomerName” ที่มี “or” เป็นส่วนประกอบ

4. _r% แบบนี้คือ ค้นหาข้อมูลที่มี r เป็นส่วนประกอบตัวที่ 2 นะ

SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
จะ filter เฉพาะที่มี r เป็นตัวที่ 2 นับจากด้านหน้า

5. a__% แบบนี้คือ ให้เริ่มต้นด้วย a และมีอย่างน้อย 3 หลัก
(at least 3 characters in length)

SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';
เริ่มต้นด้วย a และมีอย่างน้อย 3 หลัก

6. a%o แบบนี้คือ ให้เร่ิมต้นด้วย “a” และลงท้ายด้วย “o”

SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
เริ่มต้นด้วย a ไม่สนเล็กใหญ๋นะ และลงท้ายด้วย o

7. NOT LIKE ‘a%’ แบบนี้คือ จะไม่เอาที่ขึ้นต้นด้วย ‘a’ (เพราะมี not นำหน้า like นะ)

SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';
ที่ column ‘CustomerName’ จึงไม่มีชื่อไหนที่ขึ้นต้นด้วย ‘a’ เลย (เพราะเราใช้ NOT ไง)

PS:
เพิ่มเติมตัวอย่างของการใช้งานจริง ใน Postgres ที่ต้องการหาข้อมูลว่ามี username ที่ขึ้นต้นด้วยคำว่า Walee แบบ insensitive รึป่าว ตามภาพด้านล่างเลย

เปรียบเทียบการใช้ like และ ilike ใน SQL

จบล่ะคับ แล้วพบกันใหม่คับ
GRASSROOT ENGINEER

--

--

Grassroot Engineer
Grassroot Engineer

Written by Grassroot Engineer

ATM engineer who is interested in CODING and believe in EFFORT. — https://grassrootengineer.com

No responses yet