تابع CONCAT_WS در SQL Server: راهنمای کامل اتصال رشتهها با جداکننده
تابع `CONCAT_WS` در SQL Server یک راه کارآمد برای اتصال (الحاق) دو یا چند رشته به یکدیگر با استفاده از یک جداکننده مشخص است. “WS” در `CONCAT_WS` مخفف “With Separator” (با جداکننده) است که قابلیت اصلی این تابع را نشان میدهد. این تابع به شما اجازه میدهد تا چندین عبارت رشتهای را به یک رشته واحد تبدیل کنید و بین هر بخش، جداکننده مورد نظر شما قرار گیرد.
یکی از مزیتهای بزرگ `CONCAT_WS` نسبت به توابع مشابه مانند `CONCAT` یا عملگر `+` این است که `CONCAT_WS` به طور خودکار مقادیر `NULL` را نادیده میگیرد. این بدان معناست که اگر یکی از رشتههایی که قصد اتصال آن را دارید `NULL` باشد، تابع `CONCAT_WS` آن را در خروجی نادیده میگیرد و فقط رشتههای معتبر را با جداکننده مشخص شده به هم متصل میکند. این ویژگی به شما کمک میکند تا از مدیریت دستی مقادیر `NULL` جلوگیری کرده و کد تمیزتری داشته باشید.
سینتکس اصلی تابع `CONCAT_WS` به صورت زیر است:
`CONCAT_WS (separator, argument1, argument2 [, argumentN])`
در این سینتکس، `separator` (جداکننده) رشتهای است که برای الحاق یا اتصال استفاده میشود. این جداکننده باید در تمام موقعیتها ظاهر شود. `argument1`، `argument2` و `argumentN` (آرگومانها) نیز عبارات رشتهای هستند که به یکدیگر متصل میشوند. تمامی این آرگومانها به طور ضمنی به انواع رشتهای تبدیل میشوند.
برای مثال، اگر بخواهید نام، نام میانی و نام خانوادگی را با فاصله به هم متصل کنید، میتوانید از این تابع استفاده کنید:
**SELECT CONCAT_WS(' ', 'علی', 'رضا', 'محمدی') AS FullName;**
خروجی این دستور `علی رضا محمدی` خواهد بود. جداکننده در این مثال یک کاراکتر فاصله است.
**SELECT CONCAT_WS('/', '2023', '07', '15') AS Date;**
این دستور خروجی `2023/07/15` را برمیگرداند.
مثالی دیگر با جداکنندههای مختلف برای نشان دادن انعطافپذیری این تابع:
**SELECT CONCAT_WS(', ', 'سیب', 'پرتقال', 'موز') AS Fruits;**
**SELECT CONCAT_WS(' - ', 'تهران', 'اصفهان', 'شیراز') AS Cities;**
خروجی اول `سیب, پرتقال, موز` و خروجی دوم `تهران – اصفهان – شیراز` خواهد بود.
یکی از قابلیتهای مهم `CONCAT_WS` نحوه برخورد آن با مقادیر `NULL` است. فرض کنید یکی از آرگومانها `NULL` باشد:
**SELECT CONCAT_WS(' ', 'جلال', NULL, 'کریمی') AS FullName;**
برخلاف عملگر `+` یا تابع `CONCAT` که در صورت وجود `NULL`، کل نتیجه را `NULL` میکنند، `CONCAT_WS` به سادگی مقدار `NULL` را نادیده میگیرد و خروجی `جلال کریمی` خواهد بود. این ویژگی در سناریوهایی که با دادههای ناقص سروکار دارید، بسیار مفید است.
میتوانید از این تابع برای ترکیب ستونهای یک جدول نیز استفاده کنید. فرض کنید جدولی با ستونهای `FirstName`، `MiddleName` و `LastName` دارید و میخواهید نام کامل افراد را به دست آورید:
**SELECT CONCAT_WS(' ', FirstName, MiddleName, LastName) AS FullName
FROM Employees;**
در صورتی که `MiddleName` برای برخی از رکوردها `NULL` باشد، `CONCAT_WS` آن را نادیده گرفته و فقط `FirstName` و `LastName` را با یک فاصله به هم متصل میکند.
اگر نیاز به حذف فضاهای خالی اضافی از ابتدا یا انتهای رشتهها قبل از اتصال دارید، میتوانید `CONCAT_WS` را با تابع `TRIM` ترکیب کنید:
**SELECT CONCAT_WS(', ', TRIM(' سلام '), TRIM(' دنیا ')) AS TrimmedString;**
این دستور خروجی `سلام, دنیا` را تولید میکند و فضاهای اضافی را قبل از اتصال حذف میکند.
در مقایسه با `CONCAT` و عملگر `+`، تابع `CONCAT_WS` برتریهای مشخصی دارد. عملگر `+` برای اتصال رشتهها نیازمند تبدیل صریح انواع داده است و در صورت وجود `NULL`، کل نتیجه `NULL` میشود. تابع `CONCAT` نیازی به تبدیل صریح ندارد اما قابلیت جداکننده را ندارد و مانند `+`، در صورت وجود `NULL` نتیجه را `NULL` میکند. `CONCAT_WS` تمام این مشکلات را حل میکند و انعطافپذیری و کارایی بیشتری در مدیریت رشتهها ارائه میدهد.