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