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

MySQL: Tìm MAX của cột kết hợp chữ+số (INV129, INV145...)

Khi cột chứa tiền tố chuỗi cố định (ví dụ: INV) theo sau là số, dùng SUBSTRING tách phần số rồi CAST ... AS UNSIGNED để so sánh số học.

Cú pháp

SELECT MAX(CAST(SUBSTRING(ten_cot, vi_tri_bat_dau, do_dai) AS UNSIGNED)) AS GiaTriLonNhat
FROM ten_bang;

Ví dụ minh họa

Tạo bảng hóa đơn (InvoiceNumber = 'INV' + số):

mysql> CREATE TABLE SoHoaDonChuSo (
    -> MaHoaDon INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> SoHoaDon VARCHAR(20)
    -> );

Chèn dữ liệu (số không theo thứ tự):

mysql> INSERT INTO SoHoaDonChuSo(SoHoaDon) VALUES
    -> ('INV129'), ('INV122'), ('INV1'), ('INV145'), ('INV19'),
    -> ('INV134'), ('INV135'), ('INV10'), ('INV100'), ('INV121');

Dữ liệu:

+-----------+------------+
| MaHoaDon  | SoHoaDon   |
+-----------+------------+
| 1         | INV129     |
| 2         | INV122     |
| 3         | INV1       |
| 4         | INV145     |
| 5         | INV19      |
| 6         | INV134     |
| 7         | INV135     |
| 8         | INV10      |
| 9         | INV100     |
| 10        | INV121     |
+-----------+------------+

Tìm số hóa đơn lớn nhất (bỏ tiền tố 'INV' = 3 ký tự)

mysql> SELECT MAX(CAST(SUBSTRING(SoHoaDon, 4, LENGTH(SoHoaDon) - 3) AS UNSIGNED)) AS SoLonNhat
    -> FROM SoHoaDonChuSo;

Kết quả:

+-----------+
| SoLonNhat |
+-----------+
| 145       |
+-----------+

Giải thích:

  • SUBSTRING(SoHoaDon, 4, ...): Bắt đầu từ ký tự thứ 4 (sau 'INV')
  • LENGTH(SoHoaDon) - 3: Độ dài phần số (tổng - 3 ký tự 'INV')
  • CAST(... AS UNSIGNED): Chuyển chuỗi số sang số để so sánh đúng (145 > 19, không phải '145' < '19' theo string)

Cách tổng quát hơn (tiền tố độ dài bất kỳ):

SUBSTRING(SoHoaDon, LENGTH('INV') + 1)