توابع رشته ای در SQL
مقدمه:
توابع رشته ای در SQL ابزاری قدرتمند برای دستکاری و تغییر رشته های متنی هستند. با استفاده از این توابع می توانید کارهایی مانند استخراج اطلاعات، تغییر حروف، حذف فضاهای اضافی و ترکیب رشته ها را انجام دهید.
کاربردهای توابع رشته ای:
- استخراج اطلاعات: برای استخراج اطلاعات خاص از یک رشته متنی مانند نام، تاریخ یا کد.
- تغییر حروف: برای تبدیل حروف کوچک به بزرگ و بالعکس.
- حذف فضاهای اضافی: برای حذف فضاهای اضافی از ابتدای، انتهای یا بین کلمات یک رشته.
- ترکیب رشته ها: برای چسباندن چند رشته به یکدیگر.
انواع توابع رشته ای:
- LEN: طول یک رشته را برمی گرداند.
- UPPER: حروف کوچک را به بزرگ تبدیل می کند.
- LOWER: حروف بزرگ را به کوچک تبدیل می کند.
- LTRIM: فضاهای اضافی از سمت چپ یک رشته را حذف می کند.
- RTRIM: فضاهای اضافی از سمت راست یک رشته را حذف می کند.
- SUBSTRING: قسمتی از یک رشته را بر اساس موقعیت و طول مشخص استخراج می کند.
- REPLACE: یک رشته را با رشته دیگر جایگزین می کند.
- CONCAT: چند رشته را به یکدیگر می چسباند.
مثال:
فرض کنید می خواهیم نام و نام خانوادگی را از یک رشته متنی استخراج کنیم. می توانیم از کد زیر استفاده کنیم:
SELECT
LTRIM(SUBSTRING(name, ۱, INSTR(name, ' '))),
RTRIM(SUBSTRING(name, INSTR(name, ' ') + ۱))
FROM customers;
نکات مهم:
- توابع رشته ای برای کار با رشته های متنی (VARCHAR, NVARCHAR, CHAR, NCHAR) استفاده می شوند.
- برای استفاده از توابع رشته ای، باید نوع داده ستون مورد نظر را به درستی مشخص کنید.
- توابع رشته ای حساس به حروف هستند.
در صورت نیاز به توضیحات بیشتر در مورد موضوعی خاص، لطفا سوال خود را مطرح کنید.
مثال های اضافی:
- تبدیل حروف اول هر کلمه به بزرگ:
SELECT UPPER(LEFT(word, ۱)) + LOWER(SUBSTRING(word, ۲)) FROM words;
- حذف فضاهای اضافی از بین کلمات:
SELECT REPLACE(name, ' ', '') FROM customers;
- ترکیب نام و نام خانوادگی:
SELECT CONCAT(firstname, ' ', lastname) FROM customers;
مثال جامع توابع رشته ای در SQL
فرض کنید یک جدول به نام users
با ستون های زیر داریم:
id
(عدد صحیح): شناسه منحصر به فرد هر کاربرname
(رشته): نام کامل کاربرemail
(رشته): آدرس ایمیل کاربرusername
(رشته): نام کاربری کاربرpassword
(رشته): رمز عبور کاربرaddress
(رشته): آدرس محل سکونت کاربر
در ادامه چند مثال از کاربرد توابع رشته ای در این جدول ارائه می دهیم:
۱. استخراج نام و نام خانوادگی از نام کامل:
SELECT
LTRIM(SUBSTRING(name, ۱, INSTR(name, ' '))),
RTRIM(SUBSTRING(name, INSTR(name, ' ') + ۱))
FROM users;
۲. تبدیل حروف اول نام و نام خانوادگی به بزرگ:
SELECT
UPPER(LEFT(firstname, ۱)) + LOWER(SUBSTRING(firstname, ۲)) AS 'نام',
UPPER(LEFT(lastname, ۱)) + LOWER(SUBSTRING(lastname, ۲)) AS 'نام خانوادگی'
FROM users;
۳. حذف فضاهای اضافی از آدرس ایمیل:
SELECT REPLACE(email, ' ', '') FROM users;
۴. تبدیل نام کاربری به حروف کوچک:
SELECT LOWER(username) FROM users;
۵. استخراج نام دامنه از آدرس ایمیل:
SELECT RIGHT(email, INSTR(email, '@') + ۱) FROM users;
۶. بررسی وجود عبارت “gmail.com” در آدرس ایمیل:
SELECT CASE WHEN INSTR(email, 'gmail.com') > ۰ THEN 'دارد' ELSE 'ندارد' END AS 'gmail.com' FROM users;
۷. ترکیب نام و نام خانوادگی با فاصله:
SELECT CONCAT(firstname, ' ', lastname) AS 'نام کامل' FROM users;
۸. حذف فضاهای اضافی از ابتدای و انتهای آدرس:
SELECT LTRIM(RTRIM(address)) FROM users;
۹. استخراج کد پستی از آدرس:
SELECT SUBSTRING(address, INSTR(address, '-') + ۱) FROM users;
۱۰. رمزنگاری رمز عبور:
SELECT MD5(password) FROM users;
با استفاده از توابع رشته ای و خلاقیت می توانید به اطلاعات مورد نیاز خود از رشته های متنی دست پیدا کنید.
نکات مهم:
- توابع رشته ای برای کار با رشته های متنی (VARCHAR, NVARCHAR, CHAR, NCHAR) استفاده می شوند.
- برای استفاده از توابع رشته ای، باید نوع داده ستون مورد نظر را به درستی مشخص کنید.
- توابع رشته ای حساس به حروف هستند.
مثال دیگر توابع رشته ای در SQL
فرض کنید می خواهیم نام و نام خانوادگی را از یک رشته متنی استخراج کنیم، اما نام و نام خانوادگی با فاصله یا , از هم جدا نشده اند.
می توانیم از کد زیر استفاده کنیم:
SELECT
CASE WHEN INSTR(name, ',') > ۰ THEN
LTRIM(SUBSTRING(name, ۱, INSTR(name, ','))) AS 'نام',
RTRIM(SUBSTRING(name, INSTR(name, ',') + ۱)) AS 'نام خانوادگی'
ELSE
LTRIM(SUBSTRING(name, ۱, INSTR(name, ' '))) AS 'نام',
RTRIM(SUBSTRING(name, INSTR(name, ' ') + ۱)) AS 'نام خانوادگی'
END
FROM users;
در این کد:
- ابتدا با استفاده از
INSTR
بررسی می کنیم که آیا , در رشته وجود دارد یا نه. - اگر , وجود داشته باشد، نام و نام خانوادگی را با استفاده از , جدا می کنیم.
- اگر , وجود نداشته باشد، نام و نام خانوادگی را با استفاده از فاصله جدا می کنیم.
به این ترتیب می توانیم نام و نام خانوادگی را از هر نوع رشته متنی استخراج کنیم.
مثال دیگر:
فرض کنید می خواهیم آدرس ایمیل را از یک رشته متنی استخراج کنیم، اما آدرس ایمیل ممکن است شامل حروف بزرگ و کوچک باشد.
می توانیم از کد زیر استفاده کنیم:
SELECT LOWER(SUBSTRING(email, ۱, INSTR(email, '@'))) || '@' || RIGHT(email, INSTR(email, '@') + ۱) FROM users;
در این کد:
- ابتدا تمام حروف آدرس ایمیل را با استفاده از
LOWER
به حروف کوچک تبدیل می کنیم. - سپس با استفاده از
INSTR
موقعیت علامت @ را پیدا می کنیم. - در نهایت، نام کاربری (قسمت قبل از @) و نام دامنه (قسمت بعد از @) را با استفاده از
||
به هم می چسبانیم.
به این ترتیب می توانیم آدرس ایمیل را با حروف کوچک از هر نوع رشته متنی استخراج کنیم.
با استفاده از توابع رشته ای و خلاقیت می توانید به اطلاعات مورد نیاز خود از رشته های متنی دست پیدا کنید.