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

Cách lấy N ký tự cuối chuỗi trong MySQL (RIGHT)


Cú pháp

Sử dụng hàm RIGHT() để lấy N ký tự cuối cùng:

SELECT RIGHT(ten_cot, so_ky_tu) AS ten_alias FROM ten_bang;

Ví dụ: Lấy 5 ký tự cuối tên sách

1. Tạo bảng

mysql> CREATE TABLE gettingLast5Characters ( 
-> BookName VARCHAR(100) 
-> ); 
Query OK, 0 rows affected (0.73 sec)

2. Chèn dữ liệu

mysql> INSERT INTO gettingLast5Characters VALUES('Introduction to C'); 
Query OK, 1 row affected (0.19 sec) 
mysql> INSERT INTO gettingLast5Characters VALUES('C in Depth'); 
Query OK, 1 row affected (0.18 sec) 
mysql> INSERT INTO gettingLast5Characters VALUES('Introduction to Java'); 
Query OK, 1 row affected (0.18 sec) 
mysql> INSERT INTO gettingLast5Characters VALUES('Let us C'); 
Query OK, 1 row affected (0.51 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM gettingLast5Characters;
+----------------------+ 
| BookName             | 
+----------------------+ 
| Introduction to C    | 
| C in Depth           | 
| Introduction to Java | 
| Let us C             | 
+----------------------+ 
4 rows in set (0.00 sec)

4. Lấy 5 ký tự cuối

mysql> SELECT RIGHT(BookName, 5) AS Last5Character FROM gettingLast5Characters;
+----------------+ 
| Last5Character | 
+----------------+ 
| to C           | 
| Depth          | 
| Java           | 
| us C           | 
+----------------+ 
4 rows in set (0.04 sec)

Lưu ý: KHOẢNG TRẮNG CŨNG ĐƯỢC ĐẾM

Kết quả "to C" có khoảng trắng đầu vì chuỗi gốc là "Introduction to C" (khoảng trắng trước C).

Hàm liên quan

HàmMô tảVí dụKết quả
LEFT(str, n)N ký tự đầuLEFT('Hello', 2)He
RIGHT(str, n)N ký tự cuốiRIGHT('Hello', 2)lo
SUBSTRING(str, start, len)Con chuỗi tùy ýSUBSTRING('Hello', 2, 3)ell
SUBSTRING_INDEX(str, delim, count)Cắt theo dấu phân cáchSUBSTRING_INDEX('a.b.c', '.', -1)c

Ứng dụng thực tế

Lấy phần mở rộng file (extension)

SELECT RIGHT(filename, LOCATE('.', REVERSE(filename)) - 1) AS extension 
FROM files;

Lấy 4 chữ số cuối thẻ tín dụng (masking)

SELECT CONCAT('****', RIGHT(card_number, 4)) AS masked_card FROM payments;

Lấy domain từ email (phương pháp khác)

SELECT RIGHT(email, LENGTH(email) - LOCATE('@', email)) AS domain FROM users;

Lưu ý hiệu năng

  • RIGHT() không dùng index được
  • Tránh dùng trong WHERE clause trên bảng lớn
  • Cân nhắc lưu cột computed nếu truy vấn thường xuyên