آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)
1398/04/23 15:46 , میلاد صاحب نظر

آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)

در جلسه قبل، مبحث توابع رشته‌ای یا String را آغاز کردیم. به دلیل ازدیاد این توابع و برای بهبود یادگیری شما، تصمیم بر این شد که این توابع در سه جلسه متوالی بررسی و توضیح داده شوند.

۱- نصب و آشنایی با SQL Server

۱۰-عملگرهای SET وCTEوPIVOT

۱۹-indexها بخش۱

۲۸-توابع تاریخ یا date بخش۲

۲-نوشتن query

۱۱-تغییر داده‌ها

۲۰-indexها بخش۲

۲۹-توابع رشته‌ای بخش۱

۳-محدود کردن ردیف‌ها

۱۲-تعریف داده‌ها بخش۱

۲۱-stored procedureها بخش۱

۳۰- توابع رشته‌ای بخش۲

۴-فیلتر کردن داده‌ها بخش ۱

۱۳-تعریف داده‌ها بخش۲

۲۲- stored procedureها بخش۲

۳۱- توابع رشته‌ای بخش۳

۵-فیلتر کردن داده‌ها بخش۲

۱۴-data typeهای بخش۱

۲۳- stored procedureها بخش۳

۳۲-توابع سیستمی بخش ۱

۶-اتصال جداول بخش۱

۱۵-data typeها بخش۲

۲۴-توابع تعریف شده توسط کاربر

۳۳-توابع سیستمی بخش۲

۷-اتصال جداول بخش۲

۱۶-ویژگی‌ها

۲۵-triggerها

۳۴-window functionها بخش۱

۸-گروه‌بندی داده‌ها

۱۷-expressionها

۲۶-توابع تجمعی

۳۵-window functionها بخش ۲

۹-subquery

۱۸-viewها

۲۷-توابع تاریخ یا date بخش۱

 

 

در جلسه قبل توابع LOWER، LEN، LEFT، DIFFERENCE، CONCAT_WS، CONCAT، CHARINDEX، CHAR، ASCII و LTRIM با مثال و مفصل توضیح داده شدند و در این جلسه به بیان مباحث بخش ۲ مبحث توابع رشته‌ای خواهیم پرداخت. با ما همراه باشید!

تابع

توضیح

بخش ۱

ASCII

مقدار کد ASCII یک کاراکتر را بازمی‌گرداند.

CHAR

یک مقدار ASCII را به یک کاراکتر تبدیل می‌کند.

CHATINDEX

درون یک رشته که از یک موقعیت خاص شروع می‌شود به دنبال یک زیر رشته می‌گردد و موقعیت زیر رشته را بازمی‌گرداند.

CONCAT

دو یا تعداد بیشتری رشته را به یک رشته تبدیل می‌کند.

CONCAT_WS

چندین رشته را با یک علامت مجزا کننده، به یک رشته واحد تبدیل می‌کند.

DIFFERENCE

مقادیر ()SOUNDEX از دو رشته را با هم مقایسه می‌کند.

FORMAT

یک مقدار فرمت شده با یک فرمت خاص و رفتار (اختیاری) را بازمی‌گرداند.

LEFT

تعداد مشخص شده‌ای کاراکتر را از یک رشته کاراکتر که از سمت چپ آغاز می‌شوند، استخراج می‌کند.

LEN

تعدادی کاراکتر را از یک رشته کاراکتر بازمی‌گرداند.

LOWER

کاراکترهای یک رشته را به حروف کوچک تبدیل می‌کند.

LTRIM

یک رشته جدید از یک رشته مشخص شده را پس از حذف جاهای خالی بازمی‌گرداند.

بخش ۲

NCHAR

کاراکتر Unicode با کد integer مشخص شده را بازمی‌گرداند، همان‌طور که توسط استاندارد UNICODE تعریف شده است.

PATINDEX

موقعیت آغازین اولین وقوع الگو در یک رشته را بازمی‌گرداند.

QUOTENAME

یک رشته UNICODE همراه با فاصله دهنده را بازمی‌گرداند تا رشته ورودی را تبدیل به یک شناساگر دارای فاصله معتبر تبدیل کند.

REPLACE

تمام وقوع‌های یک زیر رشته را درون یک رشته، با یک زیر رشته دیگر جایگزین می‌کند.

REPLICATE

یک رشته که به تعداد دفعات خاصی تکرار شده است را بازمی‌گرداند.

REVERSE

ترتیب برعکس یک رشته کاراکتر را بازمی‌گرداند.

RIGHT

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

RTRIM

یک رشته جدید از یک رشته مشخص شده را پس از حذف تمام جاهای خالی، بازمی‌گرداند.

SOUNDEX

یک کد (یا SOUNDEX) چهار کاراکتری از یک رشته را بر اساس اینکه چگونه گفته شده است، بازمی‌گرداند.

SPACE

یک رشته، از فضاها یا فاصله‌های تکرار شونده را بازمی‌گرداند.

بخش ۳

STR

داده‌های کاراکتری که از داده‌های عددی تبدیل شده است را بازمی‌گرداند.

STRING_AGG

ردیف‌های رشته‌های دارای یک مجزا کننده خاص را به یک رشته جدید متصل می‌کند.

STRING_ESCAPE

کاراکترهای خاصی از یک رشته را رها می‌کند و یک رشته جدید از کاراکترهای رها شده بازمی‌گرداند.

STRING_SPLIT

یک تابع با مقدار جدولی که یک رشته را بر اساس یک مجزا کننده مشخص شده، به ردیف‌های زیررشته‌ مجزا می‌کند.

STUFF

بخشی از یک رشته را حذف می‌کند و سپس یک زیر رشته دیگر را با شروع از یک موقعیت خاص، به رشته اضافه می‌کند.

SUBSTRING

یک زیر رشته از درون یک رشته که از یک موقعیت خاص آغاز می‌شود و دارای طول خاصی است، استخراج می‌کند.

TRANSLATE

چندین تک کاراکتر را در یک عملیات جایگزین کرده و تک به تک ترجمه می‌کند.

TRIM

یک رشته جدید از یک رشته مشخص شده را پس از حذف تمام جاهای خالی ابتدا و انتها و بین حروف، بازمی‌گرداند.

UNICODE

مقدار integer از یک کاراکتر را بازمی‌گرداند (همان‌طور که توسط استاندارد Unicode تعریف شده است).

UPPER

یک رشته را به حروف بزرگ تبدیل می‌کند.

تابع PATINDEX در SQL Server

تابع ()PATINDEX موقعیت اولین وقوع یک الگو در یک رشته را بازمی‌گرداند. Syntax تابع ()PATINDEX به این شکل است:

PATINDEX ( '%pattern%' , input_string )

تابع ()PATINDEX دو آرگومان می‌پذیرد:

  • Pattern یک عبارت کاراکتری است که باید یافته شود. این کد می‌تواند شامل کاراکترهای مختلفی مانند % و ‘_’ در الگو باشد. منظور از کاراکترهای مختلف، منظور همان‌هایی هستند که با عملگر LIKE به کار می‌روند.

  • Input_string یک رشته کاراکتر است که در آن الگو باید جستجو شود.

()PATINDEX یک integer بازمی‌گرداند که موقعیت اولین وقوع pattern در input_string را بازمی‌گرداند، یا در صورتی که الگو یافت نشود، مقدار صفر را بازمی‌گرداند. اگر pattern یا input_string هر کدام مقدارشان NULL باشد، آنگاه تابع ()PATINDEX مقدار NULL را بازمی‌گرداند.

توجه کنید که ()PATINDEX بر اساس collation (مقایسه و مشخصات) ورودی جستجو را انجام می‌دهد. اگر می‌خواهید از یک collation خاص دیگر استفاده کنید، می‌توانید به صورت غیر ضمنی از دستور COLLATE استفاده کنید.

مثال‌های تابع ()PATINDEX در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()PATINDEX حل کنیم.

الف) مثال ساده ()PATINDEX

این مثال، موقعیت آغازین زیر رشته ‘ern’ در رشته ‘SQL Pattern Index’ را بازمی‌گرداند:

SELECT 
    PATINDEX('%ern%', 'SQL Pattern Index') position;

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

position
-----------
9
 
(1 row affected)
ب) مثال استفاده از تابع ()PATINDEX همراه با چندین کاراکتر مختلف (wildcard)

این مثال از کاراکترهای wildcard یا خاص % و ‘_’ برای یافتن موقعیتی که در آن پس از الگوی ‘f’ دو کاراکتر تصادفی (یعنی مهم نیست چه کاراکتری باشد فقط باید دو کاراکتر وجود داشته باشد) و زیر رشته ‘ction’ در رشته ‘SQL Server string Function’ شروع شوند، استفاده کرده است:

SELECT 
    PATINDEX('%f__ction%', 'SQL Server String Function') position;

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

Position
-----------
19
 
(1 row affected)
پ) مثال استفاده از تابع ()PATINDEX برای ستون جدول

این مثال موقعیت اولین وقوع الگوی 2018 در مقادیر ستون product_name در جدول production.products از پایگاه داده نمونه Bikestores را می‌یابد.

SELECT    
    product_name, 
    PATINDEX('%2018%', product_name) position
FROM    
    production.products
WHERE 
    product_name LIKE '%2018%'
ORDER BY 
    product_name;

تصویر زیر، بخشی از خروجی را نشان می‌دهد:

نتایج

به این صورت، چگونگی استفاده از تابع ()PATINDEX برای یافتن موقعیت اولین وقوع یک الگو در یک رشته را آموختید.

تابع QUOTENAME در SQL Server

تابع ()QUOTENAME فاصله‌هایی به یک رشته ورودی اضافه می‌کند تا آن رشته را به یک شناساگر دارای حائل یا فاصله معتبر در SQL Server تبدیل کند.

کد زیر، syntax تابع ()QUOTENAME را نشان می‌دهد:

QUOTENAME ( input_string [ , quote_character ] )   

تابع ()QUOTENAME دو آرگومان می‌پذیرد:

  • Input_string یک SYSNAME است که حداکثر طول آن 128 است. اگر طول input_string بیشتر از 128 کاراکتر باشد، تابع مقدار NULL را بازمی‌گرداند.

  • Quote_ character یک کاراکتر است که از حائل یا فاصله استفاده می‌کند.

در لیست زیر، کاراکترهای نقل قول معتبر را مشاهده می‌کنید:

  • علامت تک کوتیشن (‘)
  • کروشه‌های باز و بسته ([])
  • علامت دبل کوتیشن (“)
  • پرانتزهای باز و بسته ()
  • علامت‌های بزرگ‌تر و کوچک‌تر (><)
  • آکولاد‌های باز و بسته ({})
  • علامت backtick (یا `)

اگر از یک کاراکتر غیر معتبر استفاده ‌کنید، تابع مقدار NULL را بازمی‌گرداند. اگر به وضوح مقدار quote_character را مشخص نکنید، به صورت پیش‌فرض کروشه در نظر گرفته می‌شود.

تابع ()QUOTENAME در SQL پویا بسیار مفید است.

مثال تابع ()QUOTENAME در SQL Server

کد زیر یک جدول جدید ایجاد می‌کند که نام آن شمال یک space است و یک ردیف جدید به جدول insert می‌کند:

CREATE TABLE [customer details]
(
    customer_id INT PRIMARY KEY, 
    info        VARCHAR(255)
);
 
INSERT INTO [customer details]
(
    customer_id, 
    info
)
VALUES
(
    1, 
    'detailed information...'
);

کد زیر سعی می‌کند داده‌ها را از جدول [customer details] با استفاده از SQL پویا به دست آورد:

DECLARE @tablename VARCHAR(128) = 'customer details';
DECLARE @sql NVARCHAR(100) = 'SELECT * FROM ' + @tablename;
EXECUTE (@sql);

کد بالا، ارور زیر را می‌دهد:

Invalid object name 'customer'.    

کد زیر با استفاده از تابع ()QUOTENAME، نام جدول را معتبر می‌کند:

DECLARE @tablename VARCHAR(128) = 'customer details';
DECLARE @sql NVARCHAR(100) = 'SELECT * FROM ' + QUOTENAME(@tablename);
EXECUTE (@sql);  

خروجی به این صورت است:

customer_id info
----------- -----------------------
1           detailed information...
 
(1 row affected)

در نتیجه، چگونگی استفاده از تابع ()QUOTENAME برای اضافه کردن حائل یا فاصله به یک رشته و تبدیل آن رشته به یک شناساگر حائل یا فاصله دار معتبر در SQL Server نیز آشنا شدید.

تابع REPLACE در SQL Server

برای جایگزینی تمام وقوع‌های یک زیر رشته درون یک رشته با یک زیر رشته جدید، می‌توانید از تابع ()REPLACE به صورت زیر استفاده کنید:

REPLACE(input_string, substring, new_substring);

در این syntax:

  • Input_string هر عبارت رشته‌ای است که باید جستجو شود.

  • Substring زیر رشته‌ای است که باید جایگزین شود.

  • New_substring رشته‌ای است که قرار است به جای substring قرار بگیرد.

تابع ()REPLACE یک رشته جدید بازمی‌گرداند که در آن تمام وقوع‌های زیر رشته توسط new_substring جایگزین می‌شوند. اگر هر کدام از آرگومان‌ها NULL باشند، تابع مقدار NULL بازمی‌گرداند.

مثال‌های تابع ()REPLACE در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()REPLACE حل کنیم تا بهتر آن را متوجه شوید.

الف) استفاده از تابع ()REPLACE برای رشته‌ها

مثال زیر از تابع ()REPLACE برای جایگزینی چایی (Tea) با قهوه (coffee) در رشته ‘It is a good tea at the famous tea store’ استفاده می‌کند:

SELECT 
    REPLACE(
        'It is a good tea at the famous tea store.', 
        'tea', 
        'coffee'
    ) result;

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

result
-------------
It is a good coffee at the famous coffee store.
 
(1 row affected)

همانطور که در خروجی مشاهده می‌کنید، همه وقوع‌های Tea با coffee جایگزین شدند.

ب) استفاده از تابع ()REPLACE برای ستون‌های جدول

در این مثال، از جدول sales.customers از پایگاه داده نمونه استفاده می‌کنیم:

جدول sales.customers

این مثال تابع ()REPLACE را دو بار فراخوانی می‌کند تا شماره تلفن را به یک فرمت جدید تغییر دهد:

SELECT    
 first_name, 
 last_name, 
 phone, 
 REPLACE(REPLACE(phone, '(', ''), ')', '') phone_formatted
FROM    
 sales.customers
WHERE phone IS NOT NULL
ORDER BY 
 first_name, 
 last_name;

تصویر زیر، بخشی از خروجی را نشان می‌دهد:

نتایج

نحوه عملکرد:

  • اولین فراخوانی (' ' ,')‘ ,REPLACE(phone  کاراکتر ‘)‘ در شماره تلفن را با یک space جایگزین می‌کند. مثلاً:
     381-6003 (916 <- 381-6003 (916)

  • دومین فراخوانی از نتایج اولین فراخوانی مجدداً استفاده می‌کند و کاراکتر ‘(’ را با یک space جایگزین می‌کند. مثلاً:
    381-6003 916 <- 381-6003 (916 
پ) استفاده از تابع ()REPLACE برای اصلاح داده‌ها در جدول‌ها

تابع ()REPLACE گاهی برای اصلاح داده‌ها در یک جدول مورد استفاده قرار می‌گیرد. برای مثال، جایگزین شدن لینک‌های منقضی شده با لینک‌های جدید.

کد زیر، syntax را نشان می‌دهد:

UPDATE 
    table_name
SET
    column_name = REPLACE(column_name, 'old_string','new_string')
WHERE
    condition;

برای مثال، برای تغییر کد شهر در شماره‌های تلفن از 916 به 917، می‌توانید از کد زیر استفاده کنید:

UPDATE
    sales.customers
SET
    phone = REPLACE(phone,'(916)','(917)')
WHERE
    phone IS NOT NULL;

توجه کنید که باید قبل از اجرای جایگزینی‌ها، حتماً از جدول یک بکاپ بگیرید.

به این شکل، چگونگی استفاده از تابع ()REPLACE برای جایگزینی تمام وقوع‌های یک زیر رشته، درون یک رشته با یک زیر رشته جدید را نیز آموختید.

تابع REPLICATE در SQL Server

تابع ()REPLICATE یک رشته را به تعداد دفعات خاصی تکرار می‌کند. syntax آن بسیار ساده و به شکل زیر است:

REPLICATE(input_string, count);

در این syntax:

  • Input_string یک عبارت است که مقدار آن از نوع کاراکتر یا باینری (دودویی) است.

  • Count تعداد دفعاتی است که input_string در رشته به دست آمده (نتیجه) تکرار می‌شود.

مثال‌های تابع ()REPLICATE در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()REPLICATE حل کنیم.

الف) استفاده از تابع ()REPLICATE برای تکرار یک رشته

این مثال از تابع ()REPLICATE برای سه مرتبه تکرار کاراکتر z استفاده می‌کند:

SELECT
    REPLICATE('z',3) result;

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

result
------
zzz
 
(1 row affected)
ب) استفاده از تابع ()REPLICATE برای ساخت ستون‌ها با داده صفر پیشوند (leading zero)

ابتدا، یک جدول جدید به نام spare_parts در شمای production ایجاد می‌کنیم:

CREATE TABLE production.spare_parts (
    part_id INT IDENTITY PRIMARY KEY,
    part_no VARCHAR(10) NOT NULL UNIQUE,
    description VARCHAR(50) NOT NULL
);

فرض کنید part_no همیشه باید ۱۰ کاراکتر داشته باشد. اگر یک قطعه یدکی (spare_part) دارای تعداد کمتر از ۱۰ کاراکتر باشد، آنگاه برنامه باید صفرهای پیشوند را به گونه‌ای جایگذاری کند که طول حروف قطعه یدکی همیشه ۱۰ کاراکتر داشته باشد.

دوم، چند مقدار به جدول production.spare_parts اضافه کنید:

INSERT INTO 
    production.spare_parts(part_no, description)
VALUES
    ('FRMTUBE','Frame Tube'),
    ('CHNCO','Chain Cover'),
    ('CRKS','Cranks');

سوم، داده‌ها را از جدول production.spare_parts انتخاب کنید و صفرهای لایه گذاری شده را با استفاده از تابع ()REPLICATE به سمت چپ ببرید:

SELECT 
    part_id,
    CONCAT(
        REPLICATE('0', 10 - LEN(part_no)), 
        part_no
    ) part_no,
    description
FROM 
    production.spare_parts;

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

نتایج

در این مثال:

اول، از تابع ()LEN برای محاسبه تعداد صفرهایی که باید لایه گذاری شوند، استفاده شده است:

10 - LEN(part_no)

دوم، از تابع ()REPLICATE برای تکرار صفرهای ضروری که باید لایه گذاری شوند استفاده شده است:

REPLICATE('0', 10 - LEN(part_no)

سوم، از تابع ()CONCAT برای بردن صفرهای لایه گذاری شده به سمت چپ part no استفاده شده است:

CONCAT(
    REPLICATE('0', 10 - LEN(part_no)), 
    part_no
) part_no

به این صورت، چگونگی استفاده از تابع ()REPLICATE برای تکرار یک رشته به تعداد دفعات مشخص شده را نیز آموختید.

تابع REVERSE در SQL Server

تابع ()REVERSE یک آرگومان رشته می‌پذیرد و ترتیب برعکس آن رشته را بازمی‌گرداند.

کد زیر، syntax تابع ()REVERSE را نشان می‌دهد:

REVERSE ( input_string )  

Input_string یک عبارت رشته کاراکتر است. در غیر این صورت، باید با استفاده از تابع ()CAST رشته ورودی را به صورت غیر ضمنی به VARCHAR تبدیل کنید.

مثال‌های تابع ()REVERSE در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()REVERSE حل کنیم.

الف) استفاده از تابع ()REVERSE برای برعکس کردن یک رشته

این مثال از تابع ()REVERSE برای برعکس کردن رشته ‘ecnalubma’ استفاده می‌کند:

SELECT 
    REVERSE('ecnalubma') result;

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

result
---------
ambulance
 
(1 row affected)
ب) استفاده از تابع ()REVERSE برای مشخص کردن اینکه آیا یک رشته از دو طرف یکسان خوانده می‌شود یا خیر

قصد داریم بررسی کنیم ببینیم آیا کلماتی مانند madam یا redivider از دو طرف به یک شکل خوانده می‌شوند یا خیر. مثال زیر از تابع ()REVERSE و عبارت CASE برای بررسی اینکه آیا یک رشته از دو طرف یکسان خوانده می‌شود یا خیر، استفاده کرده است.

DECLARE 
    @input VARCHAR(100) = 'redivider';
 
SELECT 
    CASE
        WHEN @input = REVERSE(@input)
        THEN 'Palindrome'
        ELSE 'Not Palindrome'
    END result;

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

result
--------------
Palindrome
 
(1 row affected)

در نتیجه، چگونگی استفاده از تابع ()REVERSE برای بازگرداندن ترتیب برعکس یک رشته را نیز آموختید.

تابع RIGHT در SQL Server

تابع ()RIGHT تعداد مشخصی از کاراکترها را از سمت راست یک رشته کاراکتر مشخص شده استخراج می‌کند. برای مثال، کد LEFT(‘SQL Server’, 6) مقدار Server را بازمی‌گرداند.

Syntax تابع ()RIGHT به این شکل است:

RIGHT ( input_string , number_of_characters )  

در این syntax:

  • Input_string می‌تواند یک رشته، متغیر یا ستون باشد. نتیجه input_string می‌تواند با هر نوع داده‌ای (به جز TEXT یا NTEXT) که بتوان آن را به صورت ضمنی به VARCHAR یا NVARCHAR تبدیل کرد، باشد.

  • Number_of_charactes یک integer مثبت است که تعداد کاراکترهای input_string که قرار است بازگردانده شوند را مشخص می‌کند.

توجه کنید که تابع ()RIGHT وقتی input_string یک نوع داده کاراکتری غیر Unicode باشد مقدار VARCHAR و اگر input_string یک نوع داده  کاراکتر Unicode باشد، مقدار NVARCHAR را بازمی‌گرداند.

مثال‌های تابع ()RIGHT در SQL Server

کد زیر از تابع ()RIGHT برای بازگرداندن شش کاراکتر سمت راست رشته کاراکتر SQL Server استفاده می‌کند:

SELECT LEFT('SQL Server',6) Result_string;

نتیجه این‌چنین است:

Result_string
-------------
Server
 
(1 row affected)

مثال زیر چهار کاراکتر سمت راست هر نام محصول در جدول production.products از پایگاه داده نمونه را بازمی‌گرداند:

SELECT 
 product_name,
    RIGHT(product_name, 4) last_4_characters
FROM 
    production.products
ORDER BY 
    product_name;

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

نتایج

به این شکل، چگونگی استفاده از تابع ()RIGHT برای به دست آوردن بخش سمت راست یک رشته کاراکتر با تعداد مشخصی کاراکتر را آموختید.

تابع RTRIM در SQL Server

تابع ()RTRIM بعد از حذف تمام فضاهای خالی دو طرف، یک رشته بازمی‌گرداند. کد زیر، syntax تابع ()RTRIM را نشان می‌دهد:

RTRIM(input_string)

در این syntax، کد input_string یک عبارت از داده‌های کاراکتر یا دودویی (باینری) است و می‌تواند یک رشته، متغیر یا ستون باشد.

Input_string باید یک مقدار از نوع داده (به جز NTEXT، TEXT و IMAGE) باید که بتوان آن را به صورت ضمنی به VARCHAR تبدیل کرد. در غیر این صورت، باید از تابع ()CAST برای تبدیل غیر ضمنی به یک رشته کاراکتر استفاده کنیم.

مثال‌های تابع ()RTRIM در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()RTRIM حل کنیم.

الف) استفاده از تابع ()RTRIM برای رشته‌ها

این مثال از تابع ()RTRIM برای حذف فضاهای خالی اطراف رشته ‘SQL Server RTRIM function  ’ استفاده می‌کند:

SELECT 
    RTRIM('SQL Server RTRIM Function   ') result;

خروجی به این ترتیب است:

result
----------------------------
SQL Server RTRIM Function
 
(1 row affected)
ب) استفاده از تابع ()RTRIM برای حذف فضاهای خالی در جداول

فرض کنید می‌خواهید فضاهای خالی دو طرف مقادیر یک یا چند ستون از یک جدول را حذف کنید. برای این منظور، می‌توانید از کد UPDATE زیر استفاده کنید:

UPDATE 
    table_name
SET 
    column_name = RTRIM(column_name);

برای مثال، برای حذف تمام فضاهای خالی دو طرف مقادیر موجود در ستون first_name در جدول sales.customers، می‌توانید از کد زیر استفاده کنید:

UPDATE 
    sales.customers
SET 
    first_name = RTRIM(first_name);

به این صورت، چگونگی استفاده از تابع ()RTRIM برای حذف فضاهای خالی دو طرف از یک رشته را آموختید.

تابع SOUNDEX در SQL Server

تابع ()SOUNDEX یک رشته می‌پذیرد و آن را بر اساس نحوه تلفظ رشته، به یک کد چهار کاراکتری تبدیل می‌کند.

کد زیر، syntax تابع ()SOUNDEX را نشان می‌دهد:

SOUNDEX(input_string);

اولین کاراکتر از کد  SOUNDEXهمیشه اولین کاراکتر از رشته ورودی است. دومین تا چهارمین کاراکترهای کد، شماره‌هایی هستند که نشان دهنده حرف در رشته ورودی هستند. حروف A, E, I,O,U, H,W and Y در صورتی که اولین حروف رشته نباشند، نادیده گرفته می‌شوند.

تابع ()SOUNDEX در صورت لزوم برای ایجاد یک کد چهار کاراکتری، به آخر کد به دست آمده صفر اضافه می‌کند.

هدف اصلی تابع ()SOUNDEX مقایسه شباهت بین رشته‌ها بر اساس صداها و تلفظ آن‌ها است.

برای بررسی شباهت بین کدهای SOUNDEX دو رشته، می‌توانید از تابع ()DIFFERENCE استفاده کنید.

مثال‌های تابع ()SOUNDEX در SQL Server

بیایید چند مثال برای استفاده از تابع ()SOUNDEX حل کنیم.

الف) استفاده از تابع ()SOUNDEX برای رشته‌های دارای تلفظ یکسان

این مثال از تابع ()SOUNDEX برای بازگرداندن کد SOUNDEX دو رشته ‘sea’ و ‘see’ استفاده می‌کند:

SELECT 
    SOUNDEX('see') see_soundex, 
    SOUNDEX('sea') sea_soundex;

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

see_soundex sea_soundex
----------- -----------
S000        S000
 
(1 row affected)

کدهای SOUNDEX یکسان هستند، چون see و Sea دارای تلفظ یکسان می‌باشند.

ب) استفاده از تابع ()SOUNDEX برای رشته‌های دارای تلفظ متفاوت

مثال زیر از تابع ()SOUNDEX برای به دست آوردن کدها برای رشته‌های ‘coffee’ و ‘black’ استفاده می‌کند که دارای تلفظ‌های متفاوت هستند:

SELECT 
    SOUNDEX('coffee') see_soundex, 
    SOUNDEX('tea') sea_soundex;

خروجی به این ترتیب است:

see_soundex sea_soundex
----------- -----------
C100        T000
 
(1 row affected)

به این صورت، چگونگی استفاده از تابع ()SOUNDEX برای به دست آوردن کد SOUNDEX از یک رشته را نیز آموختید.

تابع SPACE در SQL Server

تابع ()SPACE یک رشته از فضاهای تکرار شده را بازمی‌گرداند. کد زیر، syntax تابع ()SPACE را نشان می‌دهد:

SPACE(count);

در این syntax، کد count یک integer مثبت است که تعداد فضاها یا spaceها را مشخص می‌کند. اگر count منفی باشد، تابع مقدار NULL را بازمی‌گرداند.

مثال تابع ()SPACE در SQL Server

بیایید چند مثال برای استفاده از تابع ()SPACE حل کنیم.

الف) استفاده از تابع ()SPACE برای رشته‌ها

این مثال سه رشته ‘john’، فضای خالی یا Space و ‘Doe’ را به هم متصل می‌کند. به جای استفاده از فضای خالی واقعی (یعنی ‘ ‘)، از تابع ()SPACE استفاده کردیم:

SELECT 
    'John' + SPACE(1) + 'Doe' full_name;

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

full_name
---------
John Doe
 
(1 row affected)
ب) استفاده از تابع ()SPACE برای ستون جدول

مثال زیر از تابع ()SPACE برای اتصال نام، فضای خالی و نام خانوادگی در جدول sales.customers و تشکیل یک نام کامل استفاده می‌کند:

SELECT
    first_name + SPACE(1) + last_name full_name
FROM
    sales.customers
ORDER BY
    first_name,
    last_name;

تصویر زیر، بخشی از خروجی را نشان می‌دهد:

نتایج

در نتیجه، چگونگی استفاده از تابع ()SPACE برای ایجاد یک توالی از فضاهای خالی یا spaceها را نیز آموختید.

خلاصه

در این جلسه بخش ۲ مطالب مبحث توابع رشته‌ای یا string را به صورت کامل توضیح دادیم.

در این جلسه به توضیح توابع SOUNDEX، RTRIM، RIGHT، REVERSE، REPLICATE، REPLACE، QUOTENAME، PATINDEX و SPACE پرداختیم.

در جلسه آینده، بخش سوم و آخر این مبحث را پوشش خواهیم داد.

با MUG همراه باشید!

منبع: sqlservertutorial

 مطالب مرتبط

۱۳ دستور مهم SQL که هر برنامه‌نویس باید بداند
چگونه از حملات نفوذ کننده به SQL جلوگیری کنیم؟
 طبقه بندی زبان های برنامه نویسی
روش‌های هوشمندانه برای استفاده از "تلفیق" در SQL
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات