Tìm hiểu cách phân chia các giá trị chuỗi trong MySQL với sự trợ giúp của hàm Subring_index
Để phân chia một chuỗi trong MySQL, bạn cần sử dụng chức năng
9058 Goldfield Avenue\n Yonkers, NY 10701
5 do MySQL cung cấp.Hàm
9058 Goldfield Avenue\n Yonkers, NY 10701
6 cho phép bạn trích xuất một phần của chuỗi hoàn chỉnh.Cú pháp của hàm như sau:
SUBSTRING_INDEX[expression, delimiter, count];
Hàm yêu cầu bạn vượt qua 3 tham số như mô tả dưới đây:
- Tham số đầu tiên sẽ là nguồn chuỗi để hoạt động. Bạn có thể truyền một biểu thức hoặc một tên cột
- Tham số thứ hai sẽ là dấu phân cách cho biết hàm dừng trích xuất ở đâudelimiter that tells the function where to stop the extraction
- Tham số thứ ba sẽ là số lần xuất hiện của dấu phân cách. Bạn có thể vượt qua một số tích cực hoặc âmoccurrence count of the delimiter. You can pass a positive or negative number
Hãy cùng xem một ví dụ về
9058 Goldfield Avenue\n Yonkers, NY 10701
6 trong hành động.Giả sử bạn có một chuỗi địa chỉ như sau:
9058 Goldfield Avenue\n Yonkers, NY 10701
Hãy nói rằng bạn muốn phân chia địa chỉ ở trên dựa trên sự xuất hiện của biểu tượng dòng
9058 Goldfield Avenue\n Yonkers, NY 10701
8.Ở đây, cách bạn làm điều đó với chức năng
9058 Goldfield Avenue\n Yonkers, NY 10701
6:SELECT
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1]
AS address_one,
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1]
AS address_two;
Truy vấn ở trên sẽ trả về tập kết quả sau:
+-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
Hàm
9058 Goldfield Avenue\n Yonkers, NY 10701
6 quét nguồn chuỗi cho chuỗi phân cách, sau đó trích xuất chuỗi dựa trên số lượng xuất hiện của dấu phân cách mà bạn đã truyền dưới dạng tham số thứ ba.Khi bạn vượt qua một số âm, thì hàm sẽ đi qua chuỗi từ cuối thay vì từ đầu chuỗi.
Hãy cùng xem một ví dụ khác với dữ liệu bảng MySQL. Giả sử bạn có bảng
SELECT
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1]
AS address_one,
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1]
AS address_two;
1 với dữ liệu sau:+----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
Bạn có thể phân chia các chuỗi trong cột
SELECT
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1]
AS address_one,
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1]
AS address_two;
2 ở trên là SELECT
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1]
AS address_one,
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1]
AS address_two;
3 và SELECT
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1]
AS address_one,
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1]
AS address_two;
4 bằng cách sử dụng hàm 9058 Goldfield Avenue\n Yonkers, NY 10701
5 như sau:SELECT
SUBSTRING_INDEX[name,' ', 1] AS first_name,
SUBSTRING_INDEX[name,' ', -1] AS last_name
FROM students;
Truy vấn SQL ở trên sẽ trả về tập kết quả sau:
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Mark | Crane |
| Natalia | Smith |
| Gary | Anderson |
+------------+-----------+
Hàm
9058 Goldfield Avenue\n Yonkers, NY 10701
6 có thể được gọi là tham số đầu tiên của một cuộc gọi 9058 Goldfield Avenue\n Yonkers, NY 10701
6 khác để bạn có thể trích xuất một phần của chuỗi mà ở giữa các dấu phân cách.Giả sử học sinh của bạn có tên đệm như sau:
+----+----------------------+
| id | name |
+----+----------------------+
| 1 | Mark Argus Crane |
| 2 | Natalia Steven Smith |
| 3 | Gary Poul Anderson |
+----+----------------------+
Lúc đầu, dường như gọi
9058 Goldfield Avenue\n Yonkers, NY 10701
6 và vượt qua số SELECT
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1]
AS address_one,
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1]
AS address_two;
9 là tham số thứ ba có thể hoạt động.Nhưng vượt qua số
SELECT
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1]
AS address_one,
SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1]
AS address_two;
9 sẽ khiến hàm trích xuất cả tên đầu tiên và tên đệm như hình dưới đây:mysql> SELECT SUBSTRING_INDEX[name,' ', 2] as middle_name FROM students;
+----------------+
| middle_name |
+----------------+
| Mark Argus |
| Natalia Steven |
| Gary Poul |
+----------------+
Để chỉ trích xuất tên đệm, bạn cần gọi hàm
9058 Goldfield Avenue\n Yonkers, NY 10701
5 hai lần, với cuộc gọi thứ hai là tham số đầu tiên của hàm.Cuộc gọi hàm bên trong phải giống như trên, trong khi cuộc gọi bên ngoài sẽ trích xuất chuỗi bằng cách sử dụng
+-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
2 làm tham số thứ ba:SELECT
SUBSTRING_INDEX[SUBSTRING_INDEX[name, ' ', 2], ' ', -1] AS middle_name
FROM students;
Bây giờ tên đệm phải được trích xuất chính xác như hình dưới đây:
9058 Goldfield Avenue\n Yonkers, NY 10701
0Truy vấn SQL hoàn chỉnh dưới đây:
9058 Goldfield Avenue\n Yonkers, NY 10701
1Sẽ tạo ra kết quả sau:
9058 Goldfield Avenue\n Yonkers, NY 10701
2Bây giờ bạn đã học cách sử dụng chức năng
9058 Goldfield Avenue\n Yonkers, NY 10701
5 để phân chia một chuỗi.Hãy cùng xem xét cách sử dụng một quy trình được lưu trữ để chia một chuỗi theo một dấu phân cách cụ thể tiếp theo.
Chuỗi phân chia MySQL với quy trình được lưu trữ
Bạn cũng có thể chia một chuỗi trong MySQL bằng cách sử dụng quy trình được lưu trữ.
Bạn cần tạo quy trình sau trong cơ sở dữ liệu của mình:
9058 Goldfield Avenue\n Yonkers, NY 10701
3Quy trình
+-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
4 ở trên chấp nhận hai đối số:
5 để chuỗi phân tách+-----------------------+--------------------+ | address_one | address_two | +-----------------------+--------------------+ | 9058 Goldfield Avenue | Yonkers, NY 10701 | +-----------------------+--------------------+
6 cho dấu phân cách chuỗi+-----------------------+--------------------+ | address_one | address_two | +-----------------------+--------------------+ | 9058 Goldfield Avenue | Yonkers, NY 10701 | +-----------------------+--------------------+
Đầu tiên, quy trình sẽ tạo một bảng tạm thời để lưu trữ từng phần của chuỗi cho đến khi vị trí phân cách.
Sau đó, một vòng
+-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
7 sẽ được thực thi miễn là +-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
6 được tìm thấy trong +-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
5.Vòng lặp sẽ thêm các mảnh của chuỗi vào bảng
+----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
0.Khi tất cả các phần chuỗi được thêm vào bảng, truy vấn
+----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
1 sẽ truy xuất các hàng cho chuỗi.Dưới đây là một số kết quả của việc chạy thủ tục được lưu trữ:
9058 Goldfield Avenue\n Yonkers, NY 10701
4Và đó là cách mà bạn có thể chia một chuỗi bằng quy trình lưu trữ MySQL.
Nếu bạn đang phát triển một dự án ứng dụng web, thì tốt hơn hết là để ngôn ngữ lập trình xử lý phần phụ trợ của ứng dụng của bạn để phân chia chuỗi thay vì sử dụng các truy vấn MySQL.
Ví dụ: JavaScript có phương thức
+----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
2 cho phép bạn chia +----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
3 thành +----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
4:Công thức mã JavaScript: Chia chuỗi thành mảng
Các ngôn ngữ như JavaScript và PHP có nhiều chức năng có thể giúp bạn thao tác các giá trị chuỗi với độ chính xác hơn.
Nhưng nếu bạn phải làm điều đó từ MySQL, thì chức năng
9058 Goldfield Avenue\n Yonkers, NY 10701
6 sẽ là người bạn tốt nhất của bạn.