راهنمای جامع تابع REPLICATE در SQL Server: تکرار رشتهها و پدینگ دادهها
تابع `REPLICATE` در SQL Server یک تابع رشتهای قدرتمند است که به شما امکان میدهد یک رشته (کاراکتر) را تعداد دفعات مشخصی تکرار کنید. این تابع برای کاربردهای متنوعی از جمله پدینگ (افزودن کاراکترهای اضافی به ابتدا یا انتهای یک رشته برای رسیدن به طول ثابت)، ایجاد ماسک برای دادهها، و تولید دادههای تکراری مفید است.
ساختار کلی استفاده از تابع `REPLICATE` به صورت زیر است:
“`
REPLICATE (string_expression ,integer_expression)
“`
در این ساختار، `string_expression` رشتهای است که میخواهید تکرار شود. این میتواند یک ثابت، متغیر، یا ستونی از نوع `char`, `varchar`, `nchar`, `nvarchar`, `binary`, `varbinary`, `text`, یا `ntext` باشد. `integer_expression` نیز عددی است که مشخص میکند `string_expression` چند بار باید تکرار شود. این عدد میتواند از نوع `tinyint`, `smallint`, `int`, یا `bigint` باشد. در صورتی که `integer_expression` منفی باشد، نتیجه `NULL` خواهد بود.
**نمونههای کاربردی تابع REPLICATE**
در ادامه به بررسی چند مثال عملی از نحوه استفاده از تابع `REPLICATE` میپردازیم.
**1. تکرار یک رشته ساده**
این مثال نشان میدهد که چگونه یک رشته را پنج بار تکرار کنیم:
“`sql
SELECT REPLICATE(‘test’, 5);
“`
خروجی این دستور ‘testtesttesttesttest’ خواهد بود.
**2. تکرار مقادیر عددی**
اگر یک مقدار عددی را به تابع `REPLICATE` ارسال کنید، SQL Server به طور ضمنی آن را به یک رشته تبدیل کرده و سپس تکرار میکند:
“`sql
SELECT REPLICATE(1234, 3);
“`
این دستور مقدار عددی 1234 را سه بار تکرار میکند و خروجی آن ‘123412341234’ خواهد بود.
**3. تکرار کاراکتر فاصله (Space)**
تابع `REPLICATE` میتواند برای تولید فضاهای خالی به تعداد مشخص استفاده شود. این قابلیت در فرمتبندی خروجیها بسیار کاربردی است:
“`sql
SELECT ‘Hello’ + REPLICATE(‘ ‘, 5) + ‘World’;
“`
این دستور خروجی ‘Hello World’ را تولید میکند. همچنین میتوانید برای افزودن فاصله به ابتدای یک رشته به صورت زیر عمل کنید:
“`sql
SELECT REPLICATE(‘ ‘, 5) + ‘Hello World’;
“`
خروجی این دستور ‘ Hello World’ خواهد بود.
**4. پدینگ (Padding) رشتهها**
یکی از متداولترین کاربردهای تابع `REPLICATE`، پدینگ رشتهها است، به این معنی که با افزودن کاراکترهای مشخص (مانند صفر یا فاصله) به ابتدا یا انتهای یک رشته، طول آن را به یک مقدار ثابت برسانید. اغلب این کار با ترکیب `REPLICATE` و توابع `RIGHT` یا `LEFT` انجام میشود.
برای پدینگ یک رشته از سمت چپ با کاراکتر صفر تا طول 10:
“`sql
SELECT RIGHT(REPLICATE(‘0’, 10) + ‘12345’, 10);
“`
در این مثال، ابتدا 10 کاراکتر ‘0’ تولید میشود، سپس ‘12345’ به آن اضافه میگردد (‘000000000012345’). در نهایت، تابع `RIGHT` ده کاراکتر سمت راست این رشته را انتخاب میکند که منجر به خروجی ‘0000012345’ میشود.
برای پدینگ یک رشته از سمت راست با کاراکتر فاصله تا طول 10:
“`sql
SELECT LEFT(‘Test’ + REPLICATE(‘ ‘, 10), 10);
“`
در این مثال، ابتدا رشته ‘Test’ با 10 کاراکتر فاصله ترکیب میشود (‘Test ‘). سپس، تابع `LEFT` ده کاراکتر سمت چپ این رشته را انتخاب میکند که خروجی ‘Test ‘ را به همراه دارد.
**5. ماسک کردن دادهها**
تابع `REPLICATE` برای ماسک کردن (پنهان کردن) بخشی از دادههای حساس، مانند شماره کارت اعتباری یا شماره ملی، بسیار مفید است. برای مثال، میتوانید چهار رقم آخر شماره کارت اعتباری را نمایش دهید و بقیه را با کاراکتر ستاره (*) جایگزین کنید:
“`sql
DECLARE @CreditCard NVARCHAR(20) = ‘1234-5678-9012-3456’;
SELECT REPLICATE(‘*’, LEN(@CreditCard) – 4) + RIGHT(@CreditCard, 4);
“`
در این مثال، ابتدا طول کلی رشته با تابع `LEN` محاسبه میشود، سپس 4 از آن کم شده تا تعداد ستارههای لازم برای ماسک کردن تعیین شود. سپس، `REPLICATE` این تعداد ستاره را تولید میکند و در نهایت، چهار رقم آخر رشته اصلی با `RIGHT` به آن اضافه میشود. خروجی این دستور ‘************3456’ خواهد بود.
**6. رفتار تابع REPLICATE با مقادیر NULL**
اگر هر یک از پارامترهای ارسالی به تابع `REPLICATE` (هم `string_expression` و هم `integer_expression`) مقدار `NULL` داشته باشند، نتیجه تابع نیز `NULL` خواهد بود:
“`sql
SELECT REPLICATE(NULL, 5);
“`
خروجی این دستور `NULL` است.
“`sql
SELECT REPLICATE(‘test’, NULL);
“`
خروجی این دستور نیز `NULL` خواهد بود.
“`