توابع تک سطری در SQL – توابع تاریخ و زمان

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

تابع ()TO_CHAR

پیش از هر تابع دیگری که مربوط به نوع تاریخ و زمان است، می خواهیم تابع ()TO_CHAR را توضیح دهیم که در ساده ترین حالت یک مقدار نام ستونی از نوع تاریخ و زمان را دریافت و سپس آنرا به نوع CHAR تبدیل می کند. مثال زیر این حالت را نشان می دهد.

در حالت دیگر تابع یک فرمت را به عنوان آرگومان دوم دریافت و سپس مقدار تاریخ و زمان آرگومان اول را در خروجی به این فرمت تبدیل می کند. در مثال های زیر از تابع ()SYSDATE برای نمایش ساعت سیستم عاملی استفاده شده است که اوراکل بر روی این سیستم عامل در حال اجرا شدن است ولی در دو کد پایانی از تابع ()TO_CHAR برای تغییر فرمت خروجی تابع ()SYYDATE استفاده شده است. در صورتی که خروجی اول حالت پیش فرض فرمت تابع ()SYSDATE را نشان می دهد. شکل زیر (۱) خروجی این سه کوئری را نشان می دهد.

تابع ()SYSDATE و ()SYSTIMESTAMP

بنابراین تابع ()SYSDATE ساعت فعلی سیستم عاملی را بر می گرداند که اوراکل در حال اجرا شدن بر روی آن است. تابع دیگری که ساعت سیستم عامل را برگشت می دهد،با این تفاوت که خروجی شامل نقطه زمانی (Time Zone) نیز است.

تابع ()CURRENT_DATE و ()CURRENT_TIMESTAMP

در حالی که تابع ()SYSDATE تاریخ سیستم عامل یا همان سروری را نشان می دهد که اوراکل در حال اجرا شدن بر روی آن است، تابع ()CURRENT_DATE تاریخ ماشینی را نشان می دهد که از آن به سرور اوراکل وصل شده اید. توجه کنید در حالت معمول قرار نیست مستقیم از پشت خود سرور به اوراکل وصل شوید بلکه از روی ماشین های راه دور به سرور اوراکل وصل می شوید.

تابع ()NEXT_DAY

به طور مثال می خواهیم  تاریخ اولین سه شنبه بعد امروز (البته در حالت عادی به تاریخ میلادی) را بدانیم. برای این کار باید از دستور زیر استفاده کنید. توجه کنید در حالت دوم از تابع ()TO_CHAR برای تغییر فرمت استفاده کرده ایم.

مثال – می خواهیم تاریخ اولین سه شنبه بعد ۱۵ اکتبر سال ۲۰۰۹ را پیدا کنیم.

تابع ()LAST_DAY

از تابع ()LAST_DAY برای پیدا کردن تاریخ آخرین روز ماه استفاده می شود. این تابع یک ورودی از نوع DATE را دریافت کرده و سپس آخرین روز از ماه این تاریخ را نشان می دهد.

کد زیر مثال دیگری را نشان می دهد. ابتدا تاریخ فعلی توسط تابع ()SYSDATE، تاریخ آخرین روز ماه توسط تابع ()LAST_DATE و در نهایت تاریخ آخرین روز از تاریخ فعلی کم شده که نتیجه آن عددی است که تعداد روز باقیمانده تا روز پایان ماه را نشان می دهد.

در شکل (۲) زیر تاریخ فعلی ۱۰ اکتبر ۲۰۱۸ و تاریخ آخرین روز پایانی ۳۱ اکتبر ۲۰۱۸ است، پس اگر این دو تاریخ از هم کم شوند، یعنی ۱۰ – ۳۱، معلوم می شود که ۲۱ روز تا پایان ماه باقیمانده است.

تابع ()ADD_MONTHS

آرگومان اول تابع ()ADD_MONTHS یک مقدار یا نام ستونی از نوع DATE است و آرگومان بعدی عددی صحیح مثبت یا منفی است. اگر عدد مثبت باشد، پس n ماه بعدی از آرگومان اول و اگر عدد منفی باشد، n ماه قبلی از آرگومان اول را نشان می دهد. کد و شکل زیر به ترتیب یک ماه، دو ماه و ۱۰ ماه پس از تاریخ فعلی و سپس ۱ ماه و دو ماه و ۱۰ ماه پیش از تاریخ فعلی را نشان می دهد.

کد زیر مثال دیگری از ترکیب سه تابع ()TO_CHAR و تابع ()ADD_MONTHS و تابع ()LAST_DAY را نشان می دهد. بنابراین طبق ویژگی توابع، در صورتی که نوع ورودی هر تابع رعایت شود، می توانیم توابع تک سطری را به صورت تو در تو فراخوانی کنیم.

مثال – در اوراکل ۱۲ ابتدا سطرها را به صورت صعودی و بر اساس تاریخ استخدام مرتب سازی کرده و سپس ۱۰ سطر ابتدایی را محدود کنید. همچنین از تابع ()TO_CHAR برای فرمت کردن خروجی ستون hire_date استفاده کنید.