Làm cách nào để tách chuỗi bằng dấu phẩy trong MySQL?


Đố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)

Làm cách nào để tách chuỗi bằng dấu phẩy trong MySQL?


Làm cách nào để tách chuỗi bằng dấu phẩy trong MySQL?


Đặ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)

Làm cách nào để tách chuỗi bằng dấu phẩy trong MySQL?


Làm cách nào để tách chuỗi bằng dấu phẩy trong MySQL?

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ứ ba

Khi 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ư 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 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á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, 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 động

Như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ưới

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 lần gọi thứ hai là tham số đầu tiên của hàm

Lệ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ứ ba

SELECT
  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
0

Truy vấn SQL hoàn chỉnh bên dưới

9058 Goldfield Avenue\n Yonkers, NY 10701
1

Sẽ tạo ra tập kết quả sau

9058 Goldfield Avenue\n Yonkers, NY 10701
2

Bâ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ỗi

Tiế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
3

Thủ tục

+-----------------------+--------------------+
| address_one           | address_two        |
+-----------------------+--------------------+
| 9058 Goldfield Avenue |  Yonkers, NY 10701 |
+-----------------------+--------------------+
4 ở trên chấp nhận hai đối số

  • +-----------------------+--------------------+
    | address_one           | address_two        |
    +-----------------------+--------------------+
    | 9058 Goldfield Avenue |  Yonkers, NY 10701 |
    +-----------------------+--------------------+
    
    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

Đầ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 |
+-----------------------+--------------------+
5

Vò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 |
+----+---------------+
0

Sau 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ỗ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
4

Và đó 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 |
+----+---------------+
4

cô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

Làm cách nào để tách chuỗi bằng dấu phẩy trong MySQL?

MySQL có một hàm chuyên dụng FIND_IN_SET() trả về chỉ mục trường nếu giá trị được tìm thấy trong một chuỗi chứa các giá trị được phân tách bằng dấu phẩy . Ví dụ: câu lệnh sau trả về chỉ mục dựa trên một giá trị C trong chuỗi A,B,C,D. Nếu không tìm thấy giá trị đã cho, hàm FIND_IN_SET() trả về 0.

Làm cách nào để tách một chuỗi được phân tách trong MySQL?

Trong MySQL, chúng tôi sử dụng SUBSTRING_INDEX() để tách chuỗi. Nó thường bao gồm ba đối số tôi. e. , chuỗi, dấu phân cách và vị trí. Giá trị chuỗi sẽ được phân chia dựa trên vị trí.