مقدمه

در مقاله قبلی در سایت آکادمی علوم داده ایران، به برخی توابع متنی در SQL پرداخته شد. در این مقاله برخی دیگر از این توابع که برای فرایند پاکسازی داده و ETL بسیار کاربردی هستند؛ بررسی شده است.برای مرور مقاله قبلی می توانید به این لینک مراجعه کنید. همچنین برای سایر مقالات آموزشی SQL می توانید به این لینک مراجعه کنید. 

توابع متنی در SQL، برای کار با داده های متنی ایجاد شده است. یکی از مهمترین کاربردهای این توابع پاکسازی داده های متنی در فرایند ETL است. به خضوض زمانی که داده های ما از نرم افزارهایی همچون اکسل به SQL Server  وارد شده اند؛ ممکن است کاربر در نرم افزار اکسل یک فاصله بی مورد یا یک کارکتر بی مورد را استفاده کرده باشد. این کاراکترهای مثل فاصله (Space) و یا رفتن به خط بعد (Line Feed) می تواند در فرایند ETL ما مشکل ایجاد کند.به عنوان مثال فرض کنید کاربر در اکسل نام کالاها را درجدولی مربوط به فروش وارد می کند. سپس دیتای این جدول به SQL واکشی می شود. پس از آن ما مقادیر منحصر بفرد ستون نام کالا را برای ایجاد دایمنشن کالا استفاده میکنیم. حال اگر یک کالای فرضی یک بار با نام “A” و بار دیگر با نام “A  ” وارد شده باشد؛ در دایمنشن ما دو کالا در نظر گرفته می شود. برای جلوگیری از این مشکل می توان ازتوابعی مثل TRIM و یا REPLACE استفاده کرد. در ادامه و در این مقاله به برخی دیگر از این توابع پرداخته می شود.

تابع CHAR

تابع CHAR با دریافت یک عدد به عنوان پارمتر، کاراکتر معادل آن را بر میگرداند.. به عنوان مثال CHAR(32) معادل کاراکتر Space بیا فاصله است. در جدول زیر مهمترین این کاراکترها که در هنگام ETL در داده های متنی باید به آنها توجه کرد آمده است.

(?)CHAR
Control   character
CHAR(9)
Tab
CHAR(32)
Space
CHAR(10)
Line   feed
CHAR(13)
Carriage   return

تابع LTRIM

 این تابع کاراکتر فاصله (Space) یا معادل همان CHAR(32) را در صورت وجود در چپ راست دیتای موجود، حذف می کند. دقت کنید که با LTRIM نمیتواند کاراکترهای مثل CHAR(9) یا CHAR(10) را حذف نمود و باید از تابع REPLACE استفاده کرد.

تابع RTRIM

این تابع کاراکتر فاصله (Space) یا معادل همان CHAR(32) را در صورت وجود در سمت راست دیتای موجود، حذف می کند. دقت کنید که این تابع نیز مشابه LTRIM نمیتواند  کاراکترهای مثل CHAR(9) یا CHAR(10) را حذف کند و باید از تابع REPLACE استفاده کرد.

تابع TRIM

این تابع کاراکتر فاصله (Space) یا معادل همان CHAR(32) را در صورت وجود در سمت راست و یا سمت چپ دیتای موجود، حذف می کند. این تابع نیز فقط کاراکتر فاصله یا معادل همان CHAR(32) را حذف می کند.

تابع REPLICATE

 این تابع یک کاراکتر را دریافت و به تعدادی که مشخص می کنیم تکرار می کند .این تابع دو پارمتر دارد. پارمتر اول کاراکتری است که می خواهیم تکرار شود و پارمتر دوم تعداد تکرار است. به عنوان مثال خروچی تابع زیر کاراکتر “0” را به تعداد سه برا تکرار می کند. در فایل ویدیویی مثالی کاربردی از استفاده از این تابع بیان شده است.

SELECT REPLICATE(“0”,3)

تابع STRING_AGG

این تابع برای تبدیل مقادیر موجود در تعدادی سطر به یک ستون با استفااده از یک جدا کننده است. به عنوان مثال فرض کنید در یک ستون کالاهای خریداری شده آمده است می خواهیم لیست این کالا ها را در یک ریدف داشته باشیم. برای این کار از این تابع به صورت زیر استفاده میکنیم.

SELECT  STRING_AGG(CAST(ProductName as NVARCHAR(MAX)),’,’) AS NewRow FROM Products

 در مثال فوق تبدیل نوع ستون ProductName به NVARCHAR(MAX) به این دلیل است که با چسباندن نام کالاها به هم ممکن است تعداد کاراکترهای ردیف جدید زیاد شده و با خطا مواجه شویم. این تابع یک قسمت WITHIN GROUP نیز دارد که برای مرتب سازی نام ها در ردیف جدید استفاده می شود. در فایل ویدیویی مثال کاملی از این تابع بررسی شده است.

تابع تابع STRING_Split

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

SELECT  Value FROM  FROM Products

CROSS APPLY STRING_SPLIT(NewRow, ’,’)

در فایل ویدیویی زیر تمامی توابع فوق با مثال بررسی شده است.فایل های مورد استفاده در فایل ویدیویی را می توانید از این لینک دانلود کنید.



پایان