تابع REPLICATE:

این تابع، رشته ورودی را به تعدادی مشخص تکرار می کند.

نحوه استفاده:

REPLICATE (string_expression,integer_expression)

 پارامترها:

پارامتر توضیح
string_expression

یک عبارت، از نوع رشته ای یا باینری است.

integer_expression

یک عبارت، از هر نوع عددی مانند int یا bigint و... است. اگر integer_expression منفی باشد REPLICATE مقدار NULL را برمی گرداند.

 نوع داده خروجی(Return Type):

نوع داده خروجی با نوع string_expression یکسان است. البته اگر string_expression یکی از انواع زیر نباشد تابع REPLICATE مقدار خروجی را به 8000 بایت کاهش می دهد.

varchar(max) یا nvarchar(max)

 برای برگرداندن مقداری بزرگتر از 8000 بایت، باید string_expression را به طور صریح با استفاده از تابع CAST به نوع داده ای مناسب تبدیل کرد.

تذکر:سطح Compatibility پایگاه داده در مقدار برگشتی می تواند موثر باشد. برای اطلاعات بیشتر درباره compatibility به لینک زیر مراجعه کنید:

sp_dbcmptlevel (Transact-SQL)


مثال1:در مثال زیر، با استفاده از تابع DATALENGTH و REPLICATE به سمت چپ فیلدهای c1 و c2 صفر اضافه می کنیم:

USE AdventureWorks2008R2;
GO
IF EXISTS(SELECT name FROM sys.tables WHERE name = 't1')
   DROP TABLE t1;
GO
CREATE TABLE t1
(
c1 varchar(3),
c2 char(3)
);
GO
INSERT INTO t1 VALUES ('2', '2');
INSERT INTO t1 VALUES ('37', '37');
INSERT INTO t1 VALUES ('597', '597');
GO
SELECT REPLICATE('0', 3 - DATALENGTH(c1)) + c1 AS 'Varchar Column',
       REPLICATE('0', 3 - DATALENGTH(c2)) + c2 AS 'Char Column'
FROM t1;
GO

نتیجه به شکل زیر خواهد بود:

Varchar Column Char Column
002 2
037 37
597 597

توضیح مثال:

  1. اگر جدول t1 وجود داشت با استفاده از دستور DROP آنرا کامل حذف می کنیم.
  2. جدول t1 را که شامل دو فیلد از نوع (3)varchar و (3)char است ایجاد می کنیم. (توجه داشته باشید که در هر دو فیلد، مجاز به وارد کردن حداکثر 3 کاراکتر هستیم ولی در نوع (3)char اگر کمتر از این مقدار وارد کردیم مثلاً 1 کاراکتر، مابقی فیلد با space پر می شود، بنابراین با احتساب اینکه برای هر کاراکتر 1 بایت در نظر گرفته می شود، طول فیلدی که از نوع (3)char است همیشه 3 بایت خواهد بود)
  3. با دستور INSERT مقادیر مساوی را برای دو فیلد c1 و c2 وارد می کنیم.
  4. در دستور SELECT برای چاپ ردیف اول، چون در فیلد اول (c1) فقط یک کاراکتر ذخیره شده ("2") بنابراین خروجی تابع DATALENGTH یک بایت خواهد بود و وقتی منهای 3 می شود تابع REPLICATE دو صفر چاپ می کند و در نهایت "002" چاپ می شود. ولی در فیلد دوم (c2) چون 3 کاراکتر ذخیره شده ("2  ") یعنی 2 space و یک کاراکتر "2"، بنابراین خروجی تابع DATALENGTH سه بایت خواهد بود و در تابع REPLICATE هیچ تکرای نخواهیم داشت و در نتیجه "2" چاپ خواهد شد.

برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServerکلیک کنید.

READ MORE