MySQL ไม่มีฟังก์ชัน CONTAINS() สำหรับค้นหาสตริง (ต่างจาก SQL Server) ใช้ LIKE ร่วมกับ CONCAT('%', YEAR(CURDATE()), '%') เพื่อค้นหาปีปัจจุบันในสตริง
ตัวอย่างการใช้งาน
1. วันที่ปัจจุบัน
mysql> SELECT CURDATE(); +------------+ | curdate() | +------------+ | 2019-11-28 | +------------+
2. สร้างตาราง (เก็บปีเป็นสตริง '2020/2017')
mysql> CREATE TABLE DemoTable1803 (
Name VARCHAR(20),
JoiningYear VARCHAR(20)
);
Query OK, 0 rows affected (0.00 sec)
3. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable1803 VALUES('Chris', '2020/2017');
mysql> INSERT INTO DemoTable1803 VALUES('David', '2017/2018');
mysql> INSERT INTO DemoTable1803 VALUES('Adam', '2018/2019');
4. แสดงข้อมูล
mysql> SELECT * FROM DemoTable1803; +-------+-------------+ | Name | JoiningYear | +-------+-------------+ | Chris | 2020/2017 | | David | 2017/2018 | | Adam | 2018/2019 | +-------+-------------+
5. Query: ค้นหาแถวที่ JoiningYear มีปีปัจจุบัน (2019)
mysql> SELECT * FROM DemoTable1803
WHERE JoiningYear LIKE CONCAT('%', YEAR(CURDATE()), '%');
การทำงาน:
YEAR(CURDATE())→2019(ตัวเลข)CONCAT('%', 2019, '%')→'%2019%'(สตริง)LIKE '%2019%': ค้นหา '2019' อยู่ตรงไหนก็ได้ใน JoiningYear
6. ผลลัพธ์
+------+-------------+ | Name | JoiningYear | +------+-------------+ | Adam | 2018/2019 | +------+-------------+
ฟังก์ชันค้นหาสตริงใน MySQL
| ฟังก์ชัน/ออเปอเรเตอร์ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
LIKE | Pattern Matching (% _) | col LIKE '%abc%' |
LOCATE(substr, str) | คืนตำแหน่งแรกที่เจอ (1-based) | LOCATE('abc', col) > 0 |
INSTR(str, substr) | เหมือน LOCATE สลับ Argument | INSTR(col, 'abc') > 0 |
FIND_IN_SET(str, csv) | ค้นหาใน CSV String | FIND_IN_SET('a', 'a,b,c') |
REGEXP | Regular Expression | col REGEXP '^abc' |