خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


نحوه استفاده از تابع STRING_SPLIT در SQL Server

نحوه استفاده از تابع STRING_SPLIT در SQL Server
از تابع STRING_SPLIT در SQL Server برای جدا کردن رشته از یک ردیف که جدا کننده را مشخص کرده ایم، استفاده می شود. این تابع در SQL Server 2016 معرفی شده و از نسخه SQL Server 2016 و نسخه های بعدی در دسترس برای استفاده می باشد که در ادامه با مثالهای ساده ای، طرز کار این تابع را خواهید آموخت.

سیستم یکپارچۀ سازمانی راهکار
تابع STRING_SPLIT به compatibility level حداقل 130 نیاز دارد و در صورتی که کمتر از 130 باشد، SQL Server قادر به یافتن تابع STRING_SPLIT نخواهد بود.



نحوه استفاده از تابع STRING_SPLIT در SQL Server
Syntax استفاده از این تابع صورت زیر می باشد:

STRING_SPLIT (inputstring ,seprator)

رشته های ورودی برای این تابع از هر نوع دیتاتایپی(nvarchar, varchar, nchar, char) می تواند باشد. و separator در واقع کاراکتری رشته ای از هر نوع دیتاتایپی می تواند باشد.
خب، حالا به مثال هایی از نحوه استفاده تابع STTRING_SPLIT در SQL Server می پردازیم.
در اسکریپت زیر، تابع SPLIT_STRING، برای تجزیه از , استفاده می کند. دستور زیر را در پنجره Query از SQL server 2016 یا ورژن های بالاتر کپی و paste کرده و Execute کنید.

Declare @inputstring as varchar(25) = 'Microsoft,sql,server,2016' ;
select value from STRING_SPLIT( @inputstring ,',')

همانطور که در خروجی مشاهده می کنید، تابع STRING_SPLIT، با استفاده از پارمتر , که به عنوان جداکننده مشخص شده بود، همه مقادیر رشته ای را در یک ستون نمایش داد.

نحوه استفاده از تابع STRING_SPLIT در SQL Server

Using WHERE CLAUSE With SPLIT_STRING()


Declare @inputstring as varchar(30) = 'Microsoft,sql,server,,2016' ;
select value from STRING_SPLIT( @inputstring ,',')

نحوه استفاده از تابع STRING_SPLIT در SQL Server
در result set اسکریپت فوق، همانطور که به وضوح مشخص است، یک ردیف خالی مشاهده می شود. خب، شما می توانید مقادیر خالی را در result set نمایش ندهید. در این شرایط از Where باید استفاده کنید.

Declare @inputstring as varchar(30) = 'Microsoft,sql,server,,2016' ;
select value from STRING_SPLIT( @inputstring ,',') where value <> ''

نحوه استفاده از تابع STRING_SPLIT در SQL Server
در ادامه مثال های دیگری از تابع STRING_SPLIT را مشاهده خواهید کرد.

Converting Comma seprated Tag string into columns and use cross apply to join them with Item

قبل از اینکه توضیح این مثال را دهیم، ابتدا یک جدول با مشخصات زیر ایجاد می کنیم. فرض کنید جدولی با نام Item_tagList را داریم که در آن ستون رشته ها و , وجود دارد.


Create table Item_tagList
(
temId Int Identity(1,1)

, Item Varchar(30)

,Tag Varchar(100)
)

Insert into Item_tagList values
( 'Software' ,'Windows,MsOffice,Sqlserver2016-setup,Notepad++'),

('Hardware','Mouse,HardDisk,PenDrive')

در اسکریپت فوق جدول ایجاد شده و مقادیری را بدان اضافه می کنیم.

نحوه استفاده از تابع STRING_SPLIT در SQL Server
با Select همه رکوردهای جدول را می توانید مشاهده کنید:

Select * from Item_tagList

نحوه استفاده از تابع STRING_SPLIT در SQL Server
قصد ما این است که مقادیر ستون Tag را که , در آن وجود دارد را جدا کرده و متناسب با ستون آیتم آنها را نمایش دهیم.
کوئری زیر می تواند ما را به این مهم برساند:

select ITL.Item , Value as ItemTag from Item_tagList ITL
cross apply string_split(tag,',')

نحوه استفاده از تابع STRING_SPLIT در SQL Server
همانطور که مشاهده می کنید، مقادیر جدول با معرفی , در پارامترهای STRING_SPLITT از هم جدا شده و به طور مرتب و با توجه به فیلد Item در دسته بندی مربوطه، نمایش داده شده اند.

بدون استفاده از تابع STRING_SPLIT، مجبور تایپ کدهای زیادی بودیم:

CREATE FUNCTION [dbo].[fn_split_string] (
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE (
[id] INT IDENTITY(1, 1) NOT NULL,
[value] NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @value NVARCHAR(MAX),
@pos INT = 0,
@len INT = 0

SET @string = CASE
WHEN RIGHT(@string, 1) != @delimiter
THEN @string + @delimiter
ELSE @string
END

WHILE CHARINDEX(@delimiter, @string, @pos + 1) > 0
BEGIN
SET @len = CHARINDEX(@delimiter, @string, @pos + 1) - @pos
SET @value = SUBSTRING(@string, @pos, @len)

INSERT INTO @output ([value])
SELECT LTRIM(RTRIM(@value)) AS [column]

SET @pos = CHARINDEX(@delimiter, @string, @pos + @len) + 1
END

RETURN
END

Declare @inputstring as varchar(20) = 'Microsoft,sql,server,2016'
select * from [dbo].[fn_split_string](@inputstring,',')

نحوه استفاده از تابع STRING_SPLIT در SQL Server

نمایش دیدگاه ها (1 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز