Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách chuyển đổi danh sách được phân tách bằng dấu phẩy thành hàng trong SQL Server

Vì vậy, bạn có một danh sách được phân tách bằng dấu phẩy và bây giờ bạn cần chèn nó vào cơ sở dữ liệu. Nhưng vấn đề là, bạn cần phải chèn từng giá trị trong danh sách vào hàng bảng của chính nó. Vì vậy, về cơ bản, bạn cần chia danh sách thành các giá trị riêng biệt, sau đó chèn từng giá trị đó vào một hàng mới.

T-SQL hiện có STRING_SPLIT() chức năng làm cho loại hoạt động này trở nên dễ dàng. Chức năng này lần đầu tiên có trong SQL Server 2016 và khả dụng trên cơ sở dữ liệu có mức độ tương thích từ 130 trở lên (cách kiểm tra mức độ tương thích cơ sở dữ liệu của bạn và cách thay đổi nó).

Ví dụ

Giả sử chúng ta có danh sách được phân tách bằng dấu phẩy sau:

Cat,Dog,Rabbit

Chúng tôi có thể sử dụng STRING_SPLIT() chức năng tách từng giá trị thành hàng riêng của nó. Như thế này:

SELECT value 
FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

Kết quả:

value 
------
Cat   
Dog   
Rabbit

Vậy là chúng ta đã đi được nửa chặng đường rồi. Trên thực tế, tùy thuộc vào yêu cầu của bạn, đây có thể là tất cả những gì bạn cần.

Chèn các giá trị vào bảng

Chúng ta có thể lấy đoạn mã trên và sử dụng nó với INSERT() tuyên bố. Nói cách khác, chúng ta có thể chèn các giá trị đó vào một bảng và mỗi mục danh sách sẽ nằm trong hàng riêng của nó. Để thực hiện việc này, chúng ta chỉ cần thêm tiền tố mã trước đó bằng INSERT() tuyên bố.

Ví dụ:

INSERT INTO Animals (AnimalName)
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

Thao tác này sẽ chèn từng giá trị vào hàng riêng của nó trong AnimalName cột của Animals bảng.

Kiểm tra kết quả

Để kiểm tra kết quả, hãy chạy SELECT tuyên bố chống lại bảng:

SELECT * 
FROM Animals;

Kết quả:

AnimalId  AnimalName
--------  ----------
1         Cat       
2         Dog       
3         Rabbit    

Kết quả này giả định rằng AnimalId cột là một IDENTITY cột (các giá trị tăng dần được chèn tự động với mỗi hàng mới).

Tập lệnh đầy đủ

Đây là một tập lệnh cho phép bạn thực hiện ví dụ trên chỉ trong một lần. Nó tạo cơ sở dữ liệu, tạo bảng, chèn dữ liệu, sau đó kiểm tra kết quả.

Tạo cơ sở dữ liệu:

/* Create database */
USE master;
CREATE DATABASE Nature;

Thực hiện phần còn lại:

/* Create table */
USE Nature;
CREATE TABLE Animals (
  AnimalId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  AnimalName nvarchar(255) NOT NULL
);

/* Insert data from the list */
INSERT INTO Animals (AnimalName)
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

/* Check the result */
SELECT * FROM Animals;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo một hàm đa giá trị bảng sao kê (MSTVF) trong SQL Server

  2. Phân trang trong SQL Server bằng cách sử dụng OFFSET / FETCH

  3. Chênh lệch hàng trong SQL Server

  4. Phân biệt chữ hoa chữ thường Postgres

  5. Chọn nhóm hàng phù hợp với tất cả các mục trong danh sách