سوال 1️⃣ چگونه میتوان گپ های مابین دو تاریخ یا دو عدد را بدست آورد ؟
پاسخ : برای اینکار باید از تابع level استفاده کنید ، لطفا به مثال ذیل دقت نمایید 👇👇👇👇

select level lev from dual connect by level <= 10

خروجی پرس و جوی زیر به شکل زیر میباشد 👇👇👇👇

✔️ همانطور که مشاهده میکنید تابع level که به همراه connect by استفاده شده است باعث بوجود آمدن 10 سطر با مقادیر 1 تا 10 شده است (به شرط level <= 10 دقت نمایید)
✔️ میتوان از این تکنیک استفاده کرده و اعداد مابین دو مقدار ورودی را بدست آورد یا تاریخ های مابین دو تاریخ وارد شده را استخراج کرد ، به اصطلاح میکویند گپ ها (فضاهای خالی) را استخراج کرد

✅ چگونه اعداد مابین دو عدد وارد شده را بدست آوریم؟
برای پاسخ به سوال فوق به پرس و جوی ذیل دقت نمایید

select &p_from_number + level – 1

from_to_number

from dual

connect by level <= &p_to_number – &p_from_number + 1;

در این مثال قبل از اجرای پرس و جو مقادیر پارامترهای p_from_number و p_to_number از کاربر پرسیده میشود ، فرض میکنیم مقادیر وارد شده توسط کاربر به شکل زیر است

p_from_number = 10
p_to_number = 20

بعد از اجرای پرس و جوی فوق خروجی ذیل تولید میشود 👇👇👇👇

✅ چگونه تاریخ های مابین دو تاریخ را بدست ؟
برای پاسخ به سوال فوق به پرس و جوی ذیل دقت نمایید

select to_char(&p_from_date + level – 1,

‘yyyy/mm/dd’,

‘nls_calendar=persian’) per_from_to_date
from dual

connect by level <= &p_to_date – &p_from_date + 1

در این مثال قبل از اجرای پرس و جو مقادیر پارامترهای p_from_date و p_to_date از کاربر پرسیده میشود ، فرض میکنیم مقادیر وارد شده توسط کاربر به شکل زیر است

p_from_date = to_date(‘1395/12/25′,’yyyy/mm/dd’,’nls_calendar=persian’)

p_to_date = to_date(‘1396/01/10′,’yyyy/mm/dd’,’nls_calendar=persian’)

بعد از اجرای پرس و جوی فوق خروجی ذیل تولید میشود 👇👇👇👇

✔️ در مثالهای مطرح شده مقادیر پارامترها از کاربر پرسیده شده و پس از آن گپ های بین مقادیر بدست می آید ولی میتوانید بازه های ابتدا و انتها را براساس فیلدهای جداول بدست آوورید به عنوان مثال گپ های مابین دو شناسه را در یک جدول بدست آورید ، یا تاریخ هایی که در یک جدول داده ندارند را استخراج کنید
✔️ یک مثال کاربردی در یک سامانه بانکی میتواند استخراج مانده یک حساب مابین دو تاریخ ورودی باشد که برای این کار میتوانیم به صورت زیر عمل کنیم
👈 تشکیل یک جدول از تاریخ های های وارد شده با استفاده از level
👈 استخراج مانده حساب های در روزهای مورد نظر با استفاده از جدول تراکنش ها
👈 اتصال جدول تاریخ ها و جدول مانده های بدست آمده ( باید از left join استفاده شود به دلیل اینکه الزاما یک حساب مابین تاریخ های مورد نظر ما تراکنش ندارد)
👈 برای استخراج آخرین مانده قبلی حسابی که در یک روز خاص تراکنش ندارد باید از توابعی تحلیلی مانند lag به همراه ignore nulls استفاده کنید.

دانلود فایل pdf