مقدمه
در مقاله قبلی در سایت آکادمی علوم داده ایران، به برخی توابع متنی در 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, ’,’)
در فایل ویدیویی زیر تمامی توابع فوق با مثال بررسی شده است.فایل های مورد استفاده در فایل ویدیویی را می توانید از این لینک دانلود کنید.
پایان
دیدگاه خود را بنویسید