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

Tách kết quả truy vấn số trong MySQL?

Giải pháp: LEFT(), RIGHT(), LENGTH(), CONCAT()

Sử dụng các hàm chuỗi để tách số thành các phần.

Ví dụ: Tách chữ số đầu tiên

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (
    StudentId INT
);

mysql> INSERT INTO DemoTable VALUES(2222);
mysql> INSERT INTO DemoTable VALUES(5555);
mysql> INSERT INTO DemoTable VALUES(4567);
mysql> INSERT INTO DemoTable VALUES(8905);

Truy vấn tách số

mysql> SELECT CONCAT(
    ->     LEFT(StudentId, 1), 
    ->     '/', 
    ->     RIGHT(StudentId, LENGTH(StudentId) - 1)
    -> ) AS splitNumericalValue 
    -> FROM DemoTable;

Kết quả

+---------------------+
| splitNumericalValue |
+---------------------+
| 2/222               |
| 5/555               |
| 4/567               |
| 8/905               |
+---------------------+

Giải thích các hàm

HàmÝ nghĩa
LEFT(str, n)Lấy n ký tự đầu
RIGHT(str, n)Lấy n ký tự cuối
LENGTH(str)Độ dài chuỗi (byte)
CHAR_LENGTH(str)Độ dài chuỗi (ký tự) - tốt cho UTF-8
SUBSTRING(str, start, len)Trích substring (linh hoạt hơn)
CONCAT(str1, str2, ...)Nối chuỗi

Cách tốt hơn: SUBSTRING()

-- Tách 2 số đầu / phần còn lại
SELECT CONCAT(
    SUBSTRING(StudentId, 1, 2), 
    '/', 
    SUBSTRING(StudentId, 3)
) FROM DemoTable;

-- Kết quả: 22/22, 55/55, 45/67, 89/05

Xử lý số âm và số thực

-- Chuyển thành chuỗi trước
SELECT CONCAT(
    SUBSTRING(CAST(ABS(num) AS CHAR), 1, 1),
    '/',
    SUBSTRING(CAST(ABS(num) AS CHAR), 2)
) FROM numbers;

Ứng dụng thực tế: Format mã số thuế, CMND

-- 123456789 → 123.456.789
SELECT CONCAT_WS('.',
    SUBSTRING(tax_id, 1, 3),
    SUBSTRING(tax_id, 4, 3),
    SUBSTRING(tax_id, 7, 3)
) FROM companies;

Lưu ý

  • Số INT tự động cast thành chuỗi trong hàm chuỗi
  • LENGTH() tính byte, CHAR_LENGTH() tính ký tự - quan trọng với UTF-8
  • Cân nhắc xử lý format ở application layer thay vì SQL