Làm cách nào để tách chuỗi trong MySQL?

Bạn có thể sử dụng hàm substring_index() từ MySQL để tách phần bên trái của chuỗi. Cú pháp như sau -

SELECT
yourColumnName1,.....N,SUBSTRING_INDEX(yourColumnName,’yourSeperatorSymbol’,1)
as anyVariableName from yourTableName;

Giá trị 1 cho biết bạn có thể lấy phần bên trái của chuỗi. Để kiểm tra cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo một bảng như sau -

mysql> create table LeftStringDemo
   -> (
   -> Id int,
   -> Words varchar(100)
   -> );
Query OK, 0 rows affected (0.92 sec)

Chèn một số bản ghi vào bảng bằng lệnh chèn. Truy vấn như sau -

mysql> insert into LeftStringDemo values(1,'MySQL==6789');
Query OK, 1 row affected (0.19 sec)

mysql> insert into LeftStringDemo values(2,'Java==Object Oriented');
Query OK, 1 row affected (0.21 sec)

mysql> insert into LeftStringDemo values(3,'C Language==Procedural Programming');
Query OK, 1 row affected (0.18 sec)

mysql> insert into LeftStringDemo values(4,'PL/SQL==Structured Programming');
Query OK, 1 row affected (0.16 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh chọn. Truy vấn như sau -

mysql> select *from LeftStringDemo;

Sau đây là đầu ra

+------+------------------------------------+
| Id   | Words                              |
+------+------------------------------------+
|    1 | MySQL==6789                        |
|    2 | Java==Object Oriented              |
|    3 | C Language==Procedural Programming |
|    4 | PL/SQL==Structured Programming     |
+------+------------------------------------+
4 rows in set (0.00 sec)

Đây là truy vấn lấy phần bên trái của cột chuỗi 'Từ' trên cơ sở chuỗi phân cách '=='

Đáng ngạc nhiên là MySQL không có chức năng dành riêng cho hoạt động này trái ngược với split_part trong PostgreSQL. May mắn thay, nó có hàm SUBSTRING_INDEX() thực hiện hầu hết những gì chúng ta cần

Từ tài liệu chính thức

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
0

Trả về chuỗi con từ chuỗi str trước khi đếm số lần xuất hiện của dấu phân cách. Nếu số đếm là dương, mọi thứ ở bên trái của dấu phân cách cuối cùng (đếm từ bên trái) được trả về. Nếu số đếm là âm, mọi thứ ở bên phải của dấu phân cách cuối cùng (đếm từ bên phải) được trả về.

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
1 thực hiện khớp phân biệt chữ hoa chữ thường khi tìm kiếm dấu phân cách

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'

Chức năng này an toàn cho nhiều byte

Các định nghĩa

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');

Dung dịch

Giả sử chúng tôi muốn tìm tất cả nhân viên làm việc ở một tiểu bang nhất định (ví dụ:

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
2), đây là trường thứ tư trong cột chứa địa chỉ dưới dạng các giá trị được phân tách bằng dấu phẩy

Với chức năng

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
3, chúng tôi sẽ có thể trích xuất mọi thứ cho đến cột thứ tư chứa trạng thái

mysql> create table LeftStringDemo
   -> (
   -> Id int,
   -> Words varchar(100)
   -> );
Query OK, 0 rows affected (0.92 sec)
1

Bây giờ chúng ta biết rằng trạng thái sẽ luôn là trường cuối cùng trong giá trị kết quả. Vì hàm

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
1 cho phép sử dụng các giá trị âm để trích xuất các trường đếm từ bên phải nên chúng tôi sẽ sử dụng khả năng này để trích xuất trường ngoài cùng bên phải có chứa chữ viết tắt của tiểu bang

mysql> create table LeftStringDemo
   -> (
   -> Id int,
   -> Words varchar(100)
   -> );
Query OK, 0 rows affected (0.92 sec)
3

Giải pháp cuối cùng để tất cả nhân viên làm việc ở một trạng thái nhất định được hiển thị bên dưới

mysql> create table LeftStringDemo
   -> (
   -> Id int,
   -> Words varchar(100)
   -> );
Query OK, 0 rows affected (0.92 sec)
4

Hãy cẩn thận

Một điều cần lưu ý về

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
1 là hàm trả về toàn bộ chuỗi nếu trường được yêu cầu không tồn tại

Ví dụ:

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
6 trả về địa chỉ đầy đủ

mysql> create table LeftStringDemo
   -> (
   -> Id int,
   -> Words varchar(100)
   -> );
Query OK, 0 rows affected (0.92 sec)
7

Sau đó, cố gắng trích xuất trường thứ sáu bằng

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
7 sẽ cung cấp cho chúng tôi mã zip (trường thứ năm) sai

mysql> create table LeftStringDemo
   -> (
   -> Id int,
   -> Words varchar(100)
   -> );
Query OK, 0 rows affected (0.92 sec)
9

Một cách giải quyết khả thi cho vấn đề này là kiểm tra xem số lượng trường có lớn hơn hoặc bằng chỉ mục được yêu cầu hay không và sau đó nhập mã ở trên hoặc trả về chuỗi trống nếu chỉ mục trường không hợp lệ

mysql> insert into LeftStringDemo values(1,'MySQL==6789');
Query OK, 1 row affected (0.19 sec)

mysql> insert into LeftStringDemo values(2,'Java==Object Oriented');
Query OK, 1 row affected (0.21 sec)

mysql> insert into LeftStringDemo values(3,'C Language==Procedural Programming');
Query OK, 1 row affected (0.18 sec)

mysql> insert into LeftStringDemo values(4,'PL/SQL==Structured Programming');
Query OK, 1 row affected (0.16 sec)
0

sử dụng có thể

Trong hầu hết các trường hợp, tốt hơn là sử dụng một bảng tra cứu riêng biệt hoặc một cột cho từng trường thay vì lưu trữ dữ liệu dưới dạng các giá trị được phân tách bằng dấu phẩy để tra cứu sau này

Tuy nhiên, có thể có những trường hợp hiếm hoi mà thủ thuật trên có thể hữu ích. Ví dụ: gần đây tôi cần trả về một danh sách các giá trị từ hàm do người dùng xác định và cách duy nhất để làm điều đó là trả về một chuỗi chứa các giá trị được phân tách bằng dấu phẩy. Cuối cùng tôi đã sử dụng

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
1 để sắp xếp kết quả theo một trong các trường

Tìm kiếm trong cột chứa các giá trị được phân tách bằng dấu phẩy

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ị

CREATE TABLE employees (
   id SERIAL,
   name VARCHAR(255),
   address TEXT,
   PRIMARY KEY (id)
);

INSERT INTO employees (id, name, address) VALUES 
(1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'),
(2, 'Bob Smith', '234 Main Street,,Erie,PA,16512');
9 trong chuỗi
mysql> create table LeftStringDemo
   -> (
   -> Id int,
   -> Words varchar(100)
   -> );
Query OK, 0 rows affected (0.92 sec)
10

Làm cách nào để tách một chuỗi trong thủ tục lưu trữ MySQL?

Để tách một chuỗi và lặp qua tất cả các giá trị trong thủ tục MySQL, bạn không cần sử dụng hàm REPLACE(). Để hiểu, trước tiên hãy tạo một thủ tục được lưu trữ, sau đó tạo một bảng và gọi thủ tục được lưu trữ với một số giá trị . Giá trị sẽ được chèn vào bảng.

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

tách chuỗi thành hàng. sql -- Tách một chuỗi được phân tách bằng dấu phẩy (AKA "SET"), $strlist và trả về phần tử (còn gọi là chuỗi con) khớp với chỉ mục được cung cấp, . -- Nếu chỉ số $i bằng 0 hoặc dương, các phần tử được tính từ bên trái, bắt đầu từ 0. . -- If index $i is zero or positive, the elements are counted from the left, starting at zero.

Hàm split() trong chuỗi là gì?

Split được dùng để ngắt một chuỗi được phân tách thành các chuỗi con . Bạn có thể sử dụng mảng ký tự hoặc mảng chuỗi để chỉ định không hoặc nhiều ký tự hoặc chuỗi phân tách. Nếu không có ký tự phân cách nào được chỉ định, chuỗi sẽ được phân tách tại các ký tự khoảng trắng.

Làm cách nào để tách một chuỗi thành hai cột trong SQL?

Vui lòng kiểm tra phương thức khác: .
khai báo bảng @table (col varchar(max))
chèn các giá trị @table ('Nếu tôi đi theo con đường này, tôi sẽ đến đó nhanh hơn')
lựa chọn
trái(col, 14) Đầu ra1,
chuỗi con(col, 1+14, 14) Đầu ra2,
phải(col,14) Đầu ra3
từ @table