تابع 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 |
توضیح مثال:
- اگر جدول t1 وجود داشت با استفاده از دستور DROP آنرا کامل حذف می کنیم.
- جدول t1 را که شامل دو فیلد از نوع (3)varchar و (3)char است ایجاد می کنیم. (توجه داشته باشید که در هر دو فیلد، مجاز به وارد کردن حداکثر 3 کاراکتر هستیم ولی در نوع (3)char اگر کمتر از این مقدار وارد کردیم مثلاً 1 کاراکتر، مابقی فیلد با space پر می شود، بنابراین با احتساب اینکه برای هر کاراکتر 1 بایت در نظر گرفته می شود، طول فیلدی که از نوع (3)char است همیشه 3 بایت خواهد بود)
- با دستور INSERT مقادیر مساوی را برای دو فیلد c1 و c2 وارد می کنیم.
- در دستور SELECT برای چاپ ردیف اول، چون در فیلد اول (c1) فقط یک کاراکتر ذخیره شده ("2") بنابراین خروجی تابع DATALENGTH یک بایت خواهد بود و وقتی منهای 3 می شود تابع REPLICATE دو صفر چاپ می کند و در نهایت "002" چاپ می شود. ولی در فیلد دوم (c2) چون 3 کاراکتر ذخیره شده ("2 ") یعنی 2 space و یک کاراکتر "2"، بنابراین خروجی تابع DATALENGTH سه بایت خواهد بود و در تابع REPLICATE هیچ تکرای نخواهیم داشت و در نتیجه "2" چاپ خواهد شد.
برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServerکلیک کنید.
READ MORE