dynamic years in oracle

 

ایجاد لیست داینامیک سال شمسی در اوراکل

 

کوئری تولید سال شمسی در اوراکل . که می توان براحتی در لیست آیتم ها بصورت داینامیک مورد استفاده قرار گیرد به جای اینکه کاربر بخواهد در آیتم آنرا وارد کند.
نکته: در ابزارها و زبانهای برنامه نویسی که از دیتابیس Oracle استفاده می کنند، اگر (NLS_CALENDAR=persian) در سطح کلاینت یا اپلیکیشن سرور تنظیم شده باشد دیگر نیازی نیست که در کوئری زیر آورده شود.
در مثال اول می خواهیم ، لیست سال را، از ۳۸ سال قبل از سال جاری و تا ۵۰ سال بعد از شروع داشته باشیم:
select to_char ( add_months ( trunc ( sysdate, 'YYYY' ), t.l ), 'YYYY', 'NLS_CALENDAR=persian' ) descr,
to_char ( add_months ( trunc ( sysdate, 'YYYY' ), t.l ), 'YYYY', 'NLS_CALENDAR=persian' ) code
from ( select ( level - 38 ) * 12 l
from sys.dual
connect by level <= 50 ) t

Result:
۱۳۶۰ ۱۳۶۰
۱۳۶۱ ۱۳۶۱
۱۳۶۲ ۱۳۶۲
۱۳۶۳ ۱۳۶۳
۱۳۶۴ ۱۳۶۴
۱۳۶۵ ۱۳۶۵
۱۳۶۶ ۱۳۶۶
۱۳۶۷ ۱۳۶۷
۱۳۶۸ ۱۳۶۸
۱۳۶۹ ۱۳۶۹
... ...
۱۴۰۲ ۱۴۰۲
۱۴۰۳ ۱۴۰۳
۱۴۰۴ ۱۴۰۴
۱۴۰۵ ۱۴۰۵
۱۴۰۶ ۱۴۰۶
۱۴۰۷ ۱۴۰۷
۱۴۰۸ ۱۴۰۸
۱۴۰۹ ۱۴۰۹
در مثال دوم که بسیار کاربردی و تکنیکی می باشد. می خواهیم که هر سال بصورت داینامیکی ، سال جاری به لیست سال ما اضافه شود. در این مثال لیست ما ازسال ۱۳۰۰ تا سال جاری ایجاد شده است:

with years as (
select to_number('1'||lpad(level,3,'00')) + 300 as y
from dual
connect by level <= to_number(to_char (sysdate, 'YYYY')) - 1300
)
select y as d,
y as r
from years
order by 1
Result:
۱۳۰۱ ۱۳۰۱
۱۳۰۲ ۱۳۰۲
۱۳۰۳ ۱۳۰۳
۱۳۰۴ ۱۳۰۴
۱۳۰۵ ۱۳۰۵
۱۳۰۶ ۱۳۰۶
۱۳۰۷ ۱۳۰۷
۱۳۰۸ ۱۳۰۸
۱۳۰۹ ۱۳۰۹
۱۳۱۰ ۱۳۱۰
۱۳۱۱ ۱۳۱۱
۱۳۱۲ ۱۳۱۲
... ...
۱۳۹۵ ۱۳۹۵
۱۳۹۶ ۱۳۹۶
۱۳۹۷ ۱۳۹۷
۱۳۹۸ ۱۳۹۸
حال اگر میخواهیم فقط از یک سالی به بعد را درلیست مشاهده کنیم کافیست که یک شرط به کوئری قبلی اضافه کنیم. مثلا از سال ۱۳۹۵ به بعد تا سال جاری در لیست مشاهده شود:
with years as (
select to_number('1'||lpad(level,3,'00')) + 300 as y
from dual
connect by level <= to_number(to_char (sysdate, 'YYYY')) - 1300
)
select y as d,
y as r
from years
where y > 1395
order by 1
Result:
۱۳۹۶ ۱۳۹۶
۱۳۹۷ ۱۳۹۷
۱۳۹۸ ۱۳۹۸
امیدوار هستم که مفید واقع شده باشد.
5/5 - (1 امتیاز)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

این قسمت نباید خالی باشد
این قسمت نباید خالی باشد
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست
Oracle APEX Capabilities (OAC)