Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL ใช้ CONCAT กับ CURDATE() แทน CONTAINS() สำหรับค้นหาปีในสตริง

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

สรุป

MySQL ไม่มี CONTAINS() ใช้ LIKE CONCAT('%', YEAR(CURDATE()), '%') แทน สร้าง Pattern แบบไดนามิกจากปีปัจจุบัน ใช้ได้กับ VARCHAR/TEXT ที่เก็บปีหรือรหัสผสม

ฟังก์ชัน/ออเปอเรเตอร์คำอธิบายตัวอย่าง
LIKEPattern Matching (% _)col LIKE '%abc%'
LOCATE(substr, str)คืนตำแหน่งแรกที่เจอ (1-based)LOCATE('abc', col) > 0
INSTR(str, substr)เหมือน LOCATE สลับ ArgumentINSTR(col, 'abc') > 0
FIND_IN_SET(str, csv)ค้นหาใน CSV StringFIND_IN_SET('a', 'a,b,c')
REGEXPRegular Expressioncol REGEXP '^abc'