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

Cập nhật cột VARCHAR: Xóa chuỗi cuối cùng (đơn vị) giữ lại số trong MySQL


Vấn đề

Cột lưu chuỗi như '120 Gigabytes', cần tách lấy phần số '120' (trước dấu cách đầu tiên).

Giải pháp: LEFT + INSTR

UPDATE DemoTable 
SET Download = LEFT(Download, INSTR(Download, ' ') - 1);

Ví dụ minh họa

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

mysql> CREATE TABLE DemoTable (
    Download VARCHAR(100)
);
mysql> INSERT INTO DemoTable VALUES 
('120 Gigabytes'), ('190 Gigabytes'), ('250 Gigabytes'), ('1000 Gigabytes');

Xem dữ liệu trước

mysql> SELECT * FROM DemoTable;
+----------------+
| Download       |
+----------------+
| 120 Gigabytes  |
| 190 Gigabytes  |
| 250 Gigabytes  |
| 1000 Gigabytes |
+----------------+

Cập nhật xóa đơn vị

mysql> UPDATE DemoTable 
SET Download = LEFT(Download, INSTR(Download, ' ') - 1);
Query OK, 4 rows affected (0.16 sec)

Kết quả sau

mysql> SELECT * FROM DemoTable;
+----------+
| Download |
+----------+
| 120      |
| 190      |
| 250      |
| 1000     |
+----------+

Giải thích hàm

  • INSTR(str, ' '): Trả về vị trí (1-based) của dấu cách đầu tiên. Ví dụ: '120 Gigabytes' → vị trí 4.
  • LEFT(str, len): Lấy len ký tự từ trái. LEFT(..., 4-1=3) → '120'.

Cách thay thế khác

-- SUBSTRING_INDEX: Lấy phần trước dấu cách đầu
UPDATE DemoTable SET Download = SUBSTRING_INDEX(Download, ' ', 1);

-- REGEXP_REPLACE (MySQL 8.0+): Xóa từ dấu cách trở đi
UPDATE DemoTable SET Download = REGEXP_REPLACE(Download, ' .*', '');

-- Chỉ SELECT (không UPDATE)
SELECT SUBSTRING_INDEX(Download, ' ', 1) AS NumberPart FROM DemoTable;

⚠️ Lưu ý

  • Nếu chuỗi **không có dấu cách**, INSTR trả về 0, LEFT(..., -1) trả về chuỗi rỗng. Cần xử lý: IF(INSTR(Download, ' ') > 0, LEFT(...), Download).
  • Dữ liệu gốc bị mất. Cân nhắc thêm cột mới hoặc backup.