Tôi có 1 table Product có 2 column: ProductId (primary key) và ProductName. Làm thế nào để lấy products từ chuỗi chứa danh sách ProductId cần lấy. Ví dụ tôi cần lấy các product mà có Id được liệt kê trong chuỗi như sau: “135,345,434,509,620”.
Với ví dụ này thì có nhiều cách để làm nhưng ở đây tôi chọn phương pháp cắt chuỗi thành 1 mảng trong SQL SERVER. Và cái tôi muốn chuỗi trên thành 1 table có dạng như bên dưới để tôi có thể dễ dàng truy vấn:
Id
Id
-----
135
345
434
509
620
Để làm được điều này trước tiên ta cần phải viết 1 function để biến chuỗi trên thành 1 table. Nội dung function như sau:
135
345
434
509
620
Để làm được điều này trước tiên ta cần phải viết 1 function để biến chuỗi trên thành 1 table. Nội dung function như sau:
CREATE FUNCTION [dbo].[SplitStringToTable] ( @string NVARCHAR(MAX), @delimiter CHAR(1) ) RETURNS @output TABLE( data NVARCHAR(MAX) ) BEGIN DECLARE @start INT, @end INT SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) WHILE @start < LEN(@string) + 1 BEGIN IF @end = 0 SET @end = LEN(@string) + 1 INSERT INTO @output (data) VALUES(SUBSTRING(@string, @start, @end - @start)) SET @start = @end + 1 SET @end = CHARINDEX(@delimiter, @string, @start) END RETURN END
Chú ý function này có 2 param gồm @string và @delimiter, trong đó @string là chuỗi cần xử lí thành 1 table, và @delimiter kí tự để cắt chuỗi.
Cuối cùng ta chỉ cần viết câu truy vấn để lấy dữ liệu như sau:
SELECT * FROM Product WHERE ProductId IN (SELECT * FROM [dbo].[SplitStringToTable]('135,345,434,509,620', ','))
Ngoài cách này ra thì còn có những cách khác, đây chỉ là một trong các lựa chọn của tôi mà thôi.