در دو آموزش قبلی در سایت آکادمی علوم داده ایران، به بررسی برخی از توابع متنی (رشته ای) در زبان SQL پرداختیم. این توابع SQL برای فرایند پاکسازی و شکل دهی داده ها یا همان فرایند ETL بسیار مفید هستند.  در آموزشهای قبل، توابعی همچون STRING_AGG، STRING_SPLIT،CHARINDEX، REVERSE، و REPLICATE بررسی شدند. در این آموزش می خواهیم توابع FORMAT، PATINDEX، CONCAT، و CONCAT_WS را بررسی کنیم. 

اگر تا کنون SQL Server را نصب نکرده اید؛ می توانید برای آموزش نصب SQL Server به این لینک مراجعه کنید. همچنین برای مشاهده سایر آموزش های SQL Server میتوانید به این لینک مراجعه کنید.

تابع CONCAT

از این تابع برای اتصال جندین ستون به یکدیگر استفاده می شود. چون تابع Concat از توابع متنی است؛ خروجی آن از نوع داده متنی است. ورودی های این تابع مقادیر متنی و یا ستونهای جدول است. به عنوان مثال کویری SQL زیر مقاادیر ستون های city، country، postalcode، و address را با جدا کننده خط تیره به هم می جسباند و یک ستون جدید ایجاد میکند.

SELECT CONCAT(Country,’-‘,city,’-‘,postalcode,’-‘,address) FROM Table

تابع CONCAT_WS

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

SELECT CONCAT(‘-‘,Country, city, postalcode, address)  FROM Table

تابع FORMAT

از این تابع هم می توان برای قالب بندی ستونها و مقادیرعددی استفاده کرد؛ و هم می توان برای قالب بندی ستونها و مقادیر تاریخ استفاده کرد. یک کار برد بسیار خوب این تابع، تبدیل تاریخ میلادی به شمسی است. این تابع سه پارامتر ورودی دارد. پارامتر اول ستون یا مقداری است که می خواهیم قالب بندی کنیم. پارمتر دوم قالب یا فرمت است؛ و پارامتر سوم که اختیاری است و از SQL Server 2017 به  این تابع اضافه شده است؛ مربوط به Culture است و برای تبدیل مقادیر تاریخ به تقویم های دیگر مثل تقویم شمسی استفاده می شود. 

در سه مثال زیر کویری اول مقدار ستون عددی value را به صورت سه رقم به سه رقم با کاما جدا می کند. در مثال دوم مقدار ستون تاریخ میلادی Date را به صورت بدون جدا کننده خط تیره مثل ۲۰۲۴۱۲۰۱ نشان میدهد. کویری سوم نیز ستون تاریخ میلادی Date را به تاریخ شمسی تبدیل کرده و به صورت ۱۴۰۳۰۹۰۵ نشان می دهد.

SELECT FORMAT(Value,’##,#’) FROM Table

SELECT FORMAT(Date,’yyyyMMdd’)  FROM Table

SELECT FORMAT(Date,’yyyyMMdd’,’fa-IR’)  FROM Table

تابع PATINDEX

از این تابع برای شناسایی یک الگو در یک متن استفاده می کنیم. اگر الگو در متن وجود داشته باشد؛ شماره اولین کاراکتر الگو را برمیگرداند. در صورتی که الگو در متن پیدا نشود؛ مقدار صفر برمیگرداند. مثلا کویری زیر درصورتی که در ستون company مقدار NEW و جود داشته باشد؛ شماره کاراکتر ابتدایی یعنی N را در ستون company برمیگرداند؛ و درصورت عدم وجود NEW در ستون company مقدار صفر را بر میگرداند.

SELECT PATINDEX(‘%NEW%’,company)  FROM Table

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

پایان