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

แสดงค่าตัวแปร User-Defined Variable ใน Result Set ของ MySQL

User-Defined Variables (@var) และ CONCAT_WS ใน SELECT

MySQL รองรับ User-Defined Variables เริ่มต้นด้วย @ สามารถกำหนดค่าและใช้ใน Query เดียวกันได้ ใช้ CONCAT_WS() รวมสตริงด้วย Separator (ข้าม NULL อัตโนมัติ)

สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable1508 (
    -> StudentFirstName VARCHAR(20),
    -> StudentLastName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.55 sec)

mysql> INSERT INTO DemoTable1508 VALUES
    -> ('Chris', 'Brown'), ('David', 'Miller'), ('John', 'Doe');
Query OK, 3 rows affected

คำสั่ง: กำหนด @FullName และแสดงใน Result Set

mysql> SELECT @FullName := CONCAT_WS('-', StudentFirstName, StudentLastName)
    -> FROM DemoTable1508;

ผลลัพธ์

+------------------------------------------------------------+
| @FullName:=concat_ws('-',StudentFirstName,StudentLastName) |
+------------------------------------------------------------+
| Chris-Brown                                                |
| David-Miller                                               |
| John-Doe                                                   |
+------------------------------------------------------------+

คำอธิบาย

  • @FullName := ... - Assignment Operator กำหนดค่าให้ Variable และคืนค่าที่กำหนด
  • CONCAT_WS('-', col1, col2) - Concatenate With Separator: รวม col1, col2 ด้วย '-' ข้าม NULL ได้
  • Variable จะเก็บค่าของแถวสุดท้ายหลัง Query จบ (ในที่นี้คือ 'John-Doe')

ความแตกต่าง: := vs =

การใช้ Variable ต่อใน Query ถัดไป

mysql> SELECT @FullName;
+-----------+
| @FullName |
+-----------+
| John-Doe  |
+-----------+

⚠️ ข้อควรระวัง

  • Variable เป็น Session-scoped (หายเมื่อ Disconnect)
  • ไม่ Thread-safe (ไม่ควรใช้ใน Concurrent Environment โดยไม่ระมัดระวัง)
  • Optimizer อาจประเมินลำดับไม่คาดคิด → ผลลัพธ์อาจไม่ Deterministic
  • แนะนำใช้ใน Ad-hoc Query / Debug / Reporting เท่านั้น

CONCAT_WS vs CONCAT

CONCAT_WS('-', 'A', NULL, 'C')  -- 'A-C' (ข้าม NULL)
CONCAT('-', 'A', NULL, 'C')       -- NULL (มี NULL อยู่หนึ่งค่าผลลัพธ์เป็น NULL)
Operatorบริบทตัวอย่าง
:=Assignment ใน SQL Statement (SELECT, UPDATE, dll)SELECT @x := 1
=Assignment ใน SET Statement หรือ ComparisonSET @x = 1 หรือ WHERE @x = 1