Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Hiển thị giá trị biến người dùng (user-defined variable) trong bảng kết quả MySQL

MySQL cho phép gán và sử dụng **biến người dùng (user-defined variable)** có tiền tố @ ngay trong truy vấn. Kết hợp với CONCAT_WS() để nối chuỗi và gán vào biến, kết quả sẽ hiển thị trong bảng kết quả.

Cú pháp

SELECT @ten_bien := BIEN_THUC FROM ten_bang;

Biến sẽ mang giá trị của **hàng cuối cùng** sau khi duyệt xong (vì gán lần lượt từng hàng).

Ví dụ minh họa

Tạo bảng sinh viên:

mysql> CREATE TABLE DemoTable1508 (
    -> StudentFirstName VARCHAR(20),
    -> StudentLastName VARCHAR(20)
    -> );
mysql> INSERT INTO DemoTable1508 VALUES
    -> ('Chris','Brown'), ('David','Miller'), ('John','Doe');

Gán biến @FullName = nối tên-họ bằng '-', hiển thị:

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

Kết quả (3 hàng, giá trị biến cập nhật dần):

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

Sau truy vấn, @FullName giữ giá trị 'John-Doe' (hàng cuối).

Các hàm nối chuỗi hữu ích

HàmMô tảVí dụ
CONCAT_WS(sep, str1, str2,...)Nối với phân cách, bỏ qua NULLCONCAT_WS('-', 'a', NULL, 'c') → 'a-c'
CONCAT(str1, str2,...)Nối trực tiếp, NULL → kết quả NULLCONCAT('a', NULL, 'c') → NULL
GROUP_CONCATNối nhiều hàng thành 1 chuỗiXem bài GROUP_CONCAT

Lưu ý

  • Biến @ten_bien là **session-scoped** – chỉ tồn tại trong kết nối hiện tại.
  • Không dùng trong prepared statement an toàn (giá trị có thể không như kỳ vọng do tối ưu hóa).
  • Để gán một lần cho toàn bộ tập kết quả, dùng SELECT @var := ... FROM ... LIMIT 1 hoặc subquery.