Đối với điều này, bạn có thể sử dụng substring_index[] trong MySQL. Hãy để chúng tôi tạo một bảng -
Thí dụ
mysql> create table demo79 -> [ -> fullname varchar[50] -> ]; Query OK, 0 rows affected [0.64
Chèn một số bản ghi vào bảng với sự trợ giúp của lệnh chèn -
Thí dụ
mysql> insert into demo79 values["John,Smith"]; Query OK, 1 row affected [0.09 mysql> insert into demo79 values["David,Miller"]; Query OK, 1 row affected [0.11 mysql> insert into demo79 values["Chris,Brown"]; Query OK, 1 row affected [0.07
Hiển thị các bản ghi từ bảng bằng câu lệnh select -
Thí dụ
mysql> select *from demo79;
Điều này sẽ tạo ra đầu ra sau -
đầu ra
+--------------+ | fullname |+--------------+
| John,Smith || David,Miller |
| Chris,Brown |+--------------+
3 rows in set [0.00 sec]
Sau đây là truy vấn để tách một cột thành 2 cột bằng cách sử dụng dấu phẩy làm dấu phân tách -
Thí dụ
mysql> select -> fullname, -> substring_index[fullname, ',', 1] First_Name, -> substring_index[fullname, ',', -1] Last_Name -> from demo79;
Điều này sẽ tạo ra đầu ra sau -
đầu ra
| fullname | First_Name | Last_Name |
+--------------+------------+-----------+| John,Smith | John | Smith |
| David,Miller | David | Miller || Chris,Brown | Chris | Brown |
+--------------+------------+-----------+3 rows in set [0.00 sec]
Đặt chuỗi được phân tách bằng dấu phẩy trong IN[] như trong cú pháp bên dưới
select *from yourTableName where yourColumnName IN['yourCommaSeparatedValue'];
Trước tiên chúng ta hãy tạo một bảng -
mysql> create table DemoTable1314 -> [ -> Number varchar[100] -> ]; Query OK, 0 rows affected [0.53 sec]
Chèn một số bản ghi vào bảng bằng lệnh chèn -
________số 8_______Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -
mysql> select *from DemoTable1314;
đầu ra
+----------+ | Number | +----------+ | 45,67,89 | | 10,20,50 | | 90,56,45 | +----------+ 3 rows in set [0.00 sec]
Sau đây là truy vấn sử dụng chuỗi được phân tách bằng dấu phẩy trong MySQL `IN[]`
mysql> select *from DemoTable1314 where Number IN['10,20,50'];
đầu ra
+----------+ | Number | +----------+ | 10,20,50 | +----------+ 1 row in set [0.02 sec]
Hàm
9058 Goldfield Avenue\n Yonkers, NY 10701
6 quét nguồn chuỗi để tìm chuỗi dấu phân cách, sau đó trích xuất chuỗi dựa trên số lần xuất hiện của dấu phân cách mà bạn đã chuyển làm tham số thứ baKhi bạn truyền một số âm, thì hàm sẽ duyệt chuỗi từ cuối thay vì từ đầu chuỗi
Hãy xem một ví dụ khác với dữ liệu bảng MySQL. Giả sử bạn có một 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ể 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 thành 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ư sauSELECT
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 lệnh 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 nằm ở giữa các dấu phân cáchGiả 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, có vẻ như việc gọi
9058 Goldfield Avenue\n Yonkers, NY 10701
6 và chuyển 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àm tham số thứ ba có thể hoạt độngNhưng truyền 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 thì hàm sẽ lấy ra cả họ và tên đệm như hình bên dướimysql> 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 lần gọi thứ hai là tham số đầu tiên của hàmLệnh gọi hàm bên trong phải giống như trên, trong khi lệnh 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ứ baSELECT
SUBSTRING_INDEX[SUBSTRING_INDEX[name, ' ', 2], ' ', -1] AS middle_name
FROM students;
Bây giờ tên đệm sẽ được trích xuất chính xác như hình bên dưới
9058 Goldfield Avenue\n Yonkers, NY 10701
0Truy vấn SQL hoàn chỉnh bên dưới
9058 Goldfield Avenue\n Yonkers, NY 10701
1Sẽ tạo ra tập kết quả sau
9058 Goldfield Avenue\n Yonkers, NY 10701
2Bây giờ bạn đã học cách sử dụng hàm
9058 Goldfield Avenue\n Yonkers, NY 10701
5 để tách một chuỗiTiếp theo, hãy xem cách sử dụng thủ tục được lưu trữ để tách một chuỗi bằng một dấu phân cách cụ thể
Chuỗi phân tách MySQL với một thủ tục được lưu trữ
Bạn cũng có thể tách một chuỗi trong MySQL bằng cách sử dụng thủ tục đượ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
3Thủ tục
+-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
4 ở trên chấp nhận hai đối số
5 để tách chuỗi+-----------------------+--------------------+ | 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, thủ tục sẽ tạo một bảng tạm thời để lưu trữ từng phần của chuỗi cho đến vị trí dấu phân cách.
Sau đó, một vòng lặp
+-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
7 sẽ được thực hiện miễn là tìm thấy +-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
6 trong vòng lặp +-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
5Vòng lặp sẽ thêm các đoạn của chuỗi vào bảng
+----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
0Sau khi tất cả các phần của 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ỗiDướ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 bạn có thể tách chuỗi bằng thủ tục lưu trữ MySQL
Nếu bạn đang phát triển một dự án ứng dụng web, 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 tách 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 tách một +----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
3 thành một +----+---------------+
| id | name |
+----+---------------+
| 1 | Mark Crane |
| 2 | Natalia Smith |
| 3 | Gary Anderson |
+----+---------------+
4công thức mã JavaScript. tách chuỗi thành mảng
Các ngôn ngữ như JavaScript và PHP có nhiều hàm có thể giúp bạn thao tác các giá trị chuỗi với độ chính xác cao hơn