توابع تک سطری در SQL – توابع کاراکتری

در مطلب پیشین در مورد توابع تک سطری در SQL – توابع عددی صحبت کردیم. دسته دیگر از توابع کاراکتری هستند که خودشان به دو دسته تقسیم می شوند. یک سری از آنها کاراکتر دریافت می کنند و کاراکتر را نیز به عنوان خروجی برگشت می دهد. دسته دیگر کاراکتر را دریافت ولی به عنوان نتیجه عدد را برگشت می دهند.

تابع ()CONCAT

تابع ()CONCAT دو کاراکتر یا مقدا دو ستون کاراکتری را به هم الحاق می کند.

تابع ()LOWER

تابع ()LOWER تمامی کاراکتر به حروف کوچک می کند.

تابع ()UPPER

تابع ()UPPER تمامی کاراکتر به حروف بزرگ می کند.

تابع ()INITCAP

تابع ()INITCAP حرف اول هر یک از رشته های درون جمله را به بزرگ تبدیل می کند.

تابع ()SUBSTR

از این تابع می توان برای برش تعداد معينی از کاراکترهای يک رشته (به تعداد مشخص شده) بين دو نقطه ی مشخص استفاده کرد. آرگومان دوم نقطه شروع و آرگومان سوم نقطه پایان را مشخص می کند. در دومین مثال زیر عدد 5- به معنی از انتها پنجمین کاراکتر، یعنی کاراکتر C تا چهار کاراکتر پس از آن یعنی کاراکتر F از رشته در آرگومان اول جدا شود.

تابع ()REPLACE

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

تابع ()LTRIM

تابع ()LTRIM به صورت پیش فرض فضای خالی سمت چپ رشته را حذف می کند. اما می توانیم کاراکترهای دیگر غیر فضای خالی را نیز حذف کرد. در کد زیر کاراکترهای < و > و  = را از سمت چپ پاک می کند.

تابع ()RTRIM

تابع ()RTRIM به صورت پیش فرض فضای خالی سمت راست رشته را حذف می کند. اما می توانیم کاراکترهای دیگر غیر فضای خالی را نیز حذف کرد. در کد زیر کاراکترهای < و > و  = را از سمت راست پاک می کند.

تابع ()TRIM

تابع ()TRIM فضای خالی سمت چپ و راست رشته را حذف می کند. اما می توانیم کاراکترهای دیگر غیر فضای خالی را نیز حذف کرد. در کد زیر کاراکترهای < و > و  = را از سمت ابتدا و انتهای رشته پاک می کند.

تابع ()LENGTH

تابع ()LENGTH تعداد کاراکترهای یک رشته را برگشت می دهد. توجه کنید این تابع یک رشته یا تک کاراکتر را دریافت و سپس طول آن (عدد) را برگشت می دهد.

مثال – نام چند کاراکتر برابر با طول (تعداد) سه کاراکتر است.

مثال – چگونه تعداد تعداد اسامی کارمندانی را پیدا کنیم که طول آنها برابر با ۳ است. برای این منطور باید از تابع ()COUNT استفاده شود.

مثال – کوئری بنویسید که یک گروه بندی از رشته ها (نام کارمندها) بر اساس تعداد کاراکترهای رشته (نام کارمندها) انجام دهد. مثلا چند رشته با طول ۳ و چند رشته با طور ۱۱ وجود دارند. در مثال بالایی می توانید ببینید که تعداد ۵ نام طول آنها برابر با ۳ کاراکتر است.

شکل زیر خروجی کوئری بالا را نشان می دهد. در کوئری بالا اولا گروه بندی بر اساس طول رشته (نام کارمندها) انجام شده است، سپس یک مرتب سازی بر اساس اندازه (طول) رشته ها صورت گرفته است. توجه کنید از نام های مستعار استفاده شده و همچنین از نام مستعار Andazeh در مرتب سازی ORDER BY کمک گرفته شده است.

مثال – چگونه کوتاهترین نام در میان تمامی نام کارمندان را پیدا کنیم.

مثال – چگونه بلندترین نام در میان تمامی نام کارمندان را پیدا کنیم.

پاسخ دو مثال بالا در مطلب های پیش رو و در مطلب های مربوط به کوئری های تو در تو گفته شده اند.

در SQL Server تابع ()LEN معادل تابع ()LENGTH در اوراکل است، پس باید در کوئری های بالا به جای تابع ()LENGTH از تابع ()LEN استفاده کنید. البته توجه کنید اسکیما و جدولی به نام hr.employees در SQL Server وجود ندارد و قادتا باید از جدول دیگری که در SQL Server وجود دارد استفاده کنید.

تابع ()ASCII

تابع ()ASCII کد اسکی یک کاراکتر را برگشت می دهد. این تابع نیز عدد را به عنوان خروجی برگشت می دهد.

مثال – چگونه فهرست تمامی کارمندانی را پیدا کنیم که حرف اول نام انها با L بزرگ شروع شود. شکل زیر (۱) خروجی این مثال را نشان می دهد.

در کوئری زیر ابتدا توسط تابع ()SUBSTR اولین کاراکتر از رشته ورودی جدا می شد، زیرا آرگومان های دوم و سوم ان عدد ۱ هستند. سپس این کاراکتر به عنوان ورودی به تابع ()ASCII فرستاده شده و در نهایت عددی که شماره اسکی آن است برگشت داده می شود و پس از آن با عدد ۷۶، یعنی کد اسکی حرف L بزرگ مقایسه می شود و اگر برابر بود، پس یعنی حرف اول رشته، L بزرگ است.

توجه کنید که تابع ()ASCII یک تک کاراکتر دریافت و کد اسکی آنرا برگشت می دهد ولی تابع دیگری به نام ()CHR وجود دارد که پیش از این در مطلب  با آن آشنا شده بودیم. تابع ()CHR در واقع عددی معادل کد اسکی را دریافت و سپس کاراکتر معادل آنرا برگشت می دهد.