آموزش جامع تابع REPLACE در SQL Server: جایگزینی متن بهینه و کاربردی
تابع REPLACE در SQL Server تابعی بسیار کاربردی برای دستکاری رشتههاست. این تابع به شما اجازه میدهد تا تمام وقوع یک زیررشته مشخص (الگو) را در یک رشته ورودی، با یک زیررشته دیگر (مقدار جایگزین) عوض کنید. این تابع در سناریوهای مختلفی مانند پاکسازی دادهها، استانداردسازی فرمتها و بهروزرسانی اطلاعات متنی در پایگاه داده مفید است.
نحوه استفاده از تابع REPLACE به شرح زیر است:
REPLACE ( string_expression , string_pattern , string_replacement )
پارامترهای این تابع عبارتند از:
- string_expression: رشتهای که میخواهید عملیات جایگزینی روی آن انجام شود. این میتواند یک ستون، یک متغیر یا یک مقدار رشتهای ثابت باشد.
- string_pattern: زیررشتهای که به دنبال آن میگردید تا آن را جایگزین کنید.
- string_replacement: زیررشتهای که قرار است جایگزین string_pattern شود.
در ادامه به مثالهایی از کاربرد تابع REPLACE میپردازیم:
مثال ۱: جایگزینی پایه
این مثال ساده نحوه جایگزینی کلمه “SQL” با “Microsoft SQL Server” را نشان میدهد.
SELECT REPLACE('I love SQL', 'SQL', 'Microsoft SQL Server') AS ReplacedString;
نتیجه: ‘I love Microsoft SQL Server’
مثال ۲: جایگزینی با در نظر گرفتن حروف کوچک و بزرگ (Case Sensitivity)
REPLACE در SQL Server به صورت پیشفرض Case Insensitive (غیرحساس به حروف کوچک و بزرگ) عمل میکند، مگر اینکه Collation (مرتبسازی) پایگاه داده شما Case Sensitive باشد. در این مثال، “sql” با “Database” جایگزین میشود، زیرا Collation پیشفرض، حروف را نادیده میگیرد.
SELECT REPLACE('I love sql', 'SQL', 'Database') AS ReplacedString;
نتیجه: ‘I love Database’
مثال ۳: جایگزینی چندین وقوع
REPLACE تمام وقوعهای string_pattern را جایگزین میکند. این مثال هر دو “SQL” و “sql” را در رشته با “T-SQL” عوض میکند.
SELECT REPLACE('I love SQL and sql', 'SQL', 'T-SQL') AS ReplacedString;
نتیجه: ‘I love T-SQL and T-SQL’
مثال ۴: جایگزینی با رشته خالی
شما میتوانید string_pattern را با یک رشته خالی جایگزین کنید تا آن را حذف کنید. در این مثال، ” ” (فضای خالی) حذف میشود تا “Hello World” به “HelloWorld” تبدیل شود.
SELECT REPLACE('Hello World', ' ', '') AS ReplacedString;
نتیجه: ‘HelloWorld’
مثال ۵: جایگزینی مقدار NULL
اگر هر یک از پارامترها (string_expression, string_pattern, string_replacement) مقدار NULL داشته باشند، تابع REPLACE مقدار NULL برمیگرداند.
SELECT REPLACE('Test String', 'Test', NULL) AS ReplacedString;
SELECT REPLACE(NULL, 'Test', 'New') AS ReplacedString2;
نتیجه هر دو کوئری: NULL
مثال ۶: تابع REPLACE تو در تو (Nested REPLACE)
شما میتوانید از چندین تابع REPLACE به صورت تو در تو استفاده کنید تا چندین جایگزینی متفاوت را در یک عبارت انجام دهید. این مثال ابتدا “SQL” را با “MSSQL” و سپس “Database” را با “DB” جایگزین میکند.
SELECT REPLACE(REPLACE('SQL Database', 'SQL', 'MSSQL'), 'Database', 'DB') AS ReplacedString;
نتیجه: ‘MSSQL DB’
مثال ۷: مقایسه REPLACE و TRANSLATE
تابع TRANSLATE (معرفی شده در SQL Server 2017) برای جایگزینی چندین کاراکتر واحد به صورت همزمان استفاده میشود، در حالی که REPLACE برای جایگزینی زیررشتهها به کار میرود. این مثال تفاوت آنها را در تبدیل “abc” به “123” و “az” به “1z” نشان میدهد.
SELECT TRANSLATE('abcde', 'abc', '123') AS TranslateResult;
SELECT REPLACE('abcde', 'ab', '12') AS ReplaceResult;
نتیجه TRANSLATE: ‘123de’
نتیجه REPLACE: ’12cde’
مثال ۸: استفاده از REPLACE با یک جدول
تابع REPLACE میتواند مستقیماً روی دادههای یک ستون جدول استفاده شود. فرض کنید جدولی به نام Products با ستون ProductName داریم. این کوئری “Old” را با “New” در نام محصولات جایگزین میکند.
-- فرض کنید این یک جدول با دادههای موجود است
-- CREATE TABLE Products (ProductId INT PRIMARY KEY, ProductName NVARCHAR(100));
-- INSERT INTO Products (ProductId, ProductName) VALUES (1, 'Old Laptop'), (2, 'New Mouse'), (3, 'Old Keyboard');
SELECT ProductId, ProductName, REPLACE(ProductName, 'Old', 'New') AS UpdatedProductName
FROM Products;
نتیجه ممکن است شبیه به این باشد:
ProductId | ProductName | UpdatedProductName |
---|---|---|
1 | Old Laptop | New Laptop |
2 | New Mouse | New Mouse |
3 | Old Keyboard | New Keyboard |
مثال ۹: بهروزرسانی دادهها با REPLACE
تابع REPLACE اغلب در دستورات UPDATE برای تغییر دائمی دادهها در یک جدول استفاده میشود. این کوئری تمام وقوعهای “Old” را در ستون ProductName جدول Products با “New” جایگزین میکند.
UPDATE Products
SET ProductName = REPLACE(ProductName, 'Old', 'New')
WHERE ProductName LIKE '%Old%'; -- برای بهینهسازی، فقط ردیفهای حاوی 'Old' را بهروزرسانی میکنیم
پس از اجرای این UPDATE، اگر جدول Products را SELECT کنید، ستون ProductName برای محصولات مرتبط بهروزرسانی شده است.
“`