Làm thế nào để Tách một chuỗi theo một biểu đồ được phân cách trong SQL Server?

Trong bài viết này, chúng ta sẽ thảo luận về một số cách để tách giá trị chuỗi được phân tách. Nó có thể đạt được bằng cách sử dụng nhiều phương pháp bao gồm.

  • Sử dụng hàm STRING_SPLIT để chia chuỗi
  • Tạo một hàm có giá trị bảng do người dùng xác định để tách chuỗi,
  • Sử dụng XQuery để tách giá trị chuỗi và chuyển đổi một chuỗi được phân tách thành XML

Trước hết, chúng ta cần tạo một bảng và chèn dữ liệu vào đó, dữ liệu này sẽ được sử dụng trong cả ba phương thức. Bảng phải chứa một hàng duy nhất với id trường và chuỗi có các ký tự phân tách trong đó. Tạo một bảng có tên "sinh viên" bằng cách sử dụng mã sau.

TẠO BẢNG sinh viên (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

Chèn tên học sinh được phân tách bằng dấu phẩy trong một hàng bằng cách thực thi đoạn mã sau.

INSERT INTO student (student_name) CÁC GIÁ TRỊ ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Xác minh xem dữ liệu đã được chèn vào bảng hay chưa bằng cách sử dụng mã sau.

chọn * từ sinh viên

Phương pháp 1: Sử dụng hàm STRING_SPLIT để chia chuỗi

Trong SQL Server 2016, “STRING_SPLIT” chức năng được giới thiệu có thể được sử dụng với mức độ tương thích 130 trở lên. Nếu bạn sử dụng phiên bản SQL Server 2016 trở lên, bạn có thể sử dụng chức năng tích hợp này.

Hơn nữa “STRING_SPLIT” nhập một chuỗi có các chuỗi con được phân tách và nhập một ký tự để sử dụng làm dấu phân cách hoặc dấu phân tách. Hàm xuất ra một bảng cột đơn có các hàng chứa các chuỗi con. Tên của cột đầu ra là “Giá trị". Hàm này có hai tham số. Tham số đầu tiên là một chuỗi và tham số thứ hai là ký tự dấu phân tách hoặc dấu phân cách dựa vào đó chúng ta phải tách chuỗi. Đầu ra chứa một bảng cột đơn trong đó có các chuỗi con. Cột đầu ra này được đặt tên là "Giá trị" như chúng ta có thể thấy trong hình bên dưới. Hơn nữa, “STRING SPLIT” Hàm table_valued trả về một bảng trống nếu chuỗi đầu vào là NULL.

Mức độ tương thích của cơ sở dữ liệu:

Mỗi cơ sở dữ liệu được kết nối với một mức độ tương thích. Nó cho phép hành vi của cơ sở dữ liệu tương thích với phiên bản SQL Server cụ thể mà nó chạy.

Bây giờ chúng ta sẽ gọi hàm “string_split” để chia chuỗi được phân tách bằng dấu phẩy. Nhưng mức độ tương thích nhỏ hơn 130 do đó lỗi sau được nâng lên. “Tên đối tượng không hợp lệ‘ SPLIT_STRING '”

Vì vậy, chúng ta cần đặt mức độ tương thích cơ sở dữ liệu là 130 hoặc cao hơn. Vì vậy, chúng tôi sẽ làm theo các bước sau để thiết lập mức độ tương thích của cơ sở dữ liệu.

  • Trước hết, hãy đặt cơ sở dữ liệu thành “single_user_access_mode” bằng cách sử dụng đoạn mã sau.
ALTER DATABASE <[database_name]> SET SINGLE_USER
  • Thứ hai, thay đổi mức độ tương thích của cơ sở dữ liệu bằng cách sử dụng đoạn mã sau.
ALTER DATABASE <[database_name]> SET COMPATIBILITY_LEVEL = 130
  • Đặt cơ sở dữ liệu trở lại chế độ truy cập nhiều người dùng bằng cách sử dụng mã sau.
ALTER DATABASE <[database_name]> SET MULTI_USER
SỬ DỤNG [master] GO ALTER DATABASE [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

Đầu ra sẽ là:

Bây giờ hãy chạy mã này để nhận được kết quả cần thiết.

DECLARE @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' CHỌN * TỪ STRING_SPLIT (@string_value, ',')

Đầu ra cho truy vấn này sẽ là:

Phương pháp 2: Để tách chuỗi, hãy tạo một hàm có giá trị bảng do người dùng xác định

Chắc chắn, phương pháp truyền thống này được hỗ trợ bởi tất cả các phiên bản của SQL Server. Trong kỹ thuật này, chúng tôi sẽ tạo hàm do người dùng xác định để chia chuỗi theo ký tự được phân tách bằng cách sử dụng “ĐĂNG KÝ" chức năng, "CHARINDEX”Và vòng lặp while. Hàm này có thể được sử dụng để thêm dữ liệu vào bảng đầu ra vì kiểu trả về của nó là "bảng".

TẠO CHỨC NĂNG [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) RETURNS @result_set TABLE (splited_data NVARCHAR (MAX)) BEGIN DECLARE @start_position INT, @ending_position INT, @ending_position INTER @ending_position = CHARINDEX (@delimiter_character, @string_value) WHILE @start_position 

Bây giờ hãy thực thi đoạn mã bên dưới để gọi hàm phân tách để chia chuỗi theo ký tự dấu phân cách.

DECLARE @student_name VARCHAR (MAX); DECLARE @delimiter CHAR (1); SET @ delimiter = ',' SET @student_name = (SELECT student_name FROM student) CHỌN * TỪ dbo.split_string (@student_name, @delimiter)

Tập hợp kết quả sẽ như thế này.

Phương pháp 3: Sử dụng XQuery để tách giá trị chuỗi và chuyển đổi một chuỗi được phân tách thành XML

Vì các hàm do người dùng định nghĩa là tài nguyên cạn kiệt nên chúng ta phải tránh các hàm này. Một tùy chọn khác là hàm “string_split” được tích hợp sẵn nhưng hàm này có thể được sử dụng cho cơ sở dữ liệu có mức độ tương thích là 130 hoặc cao hơn. Vì vậy, ở đây có một giải pháp khác để giải quyết nhiệm vụ khó khăn này. Một chuỗi có thể được tách bằng cách sử dụng như sau XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Thay thế (@string_value, @delimiter_value,'') + '') AS XML) CHỌN @xml_value

Đầu ra cho truy vấn này sẽ là:

Nếu bạn muốn xem toàn bộ tệp XML. Nhấp vào đường dẫn. Khi bạn đã nhấp vào, mã liên kết sẽ trông như thế này.

Bây giờ chuỗi XML sẽ được xử lý thêm. Cuối cùng, chúng tôi sẽ sử dụng “x-Query” để truy vấn từ XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Thay thế (@string_value, @delimiter_value,'') + '') AS XML) CHỌN x.m.query ('. '). Value ('. ',' VARCHAR (15) ') AS VALUE FROM @ xml_value.nodes (' / studentname ') AS x (m) 

Đầu ra sẽ như thế này:

Facebook Twitter Google Plus Pinterest