dynamic years in oracle

 

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

 

کوئری تولید سال شمسی در اوراکل . که می توان براحتی در لیست آیتم ها بصورت داینامیک مورد استفاده قرار گیرد به جای اینکه کاربر بخواهد در آیتم آنرا وارد کند.
نکته: در ابزارها و زبانهای برنامه نویسی که از دیتابیس Oracle استفاده می کنند، اگر (NLS_CALENDAR=persian) در سطح کلاینت یا اپلیکیشن سرور تنظیم شده باشد دیگر نیازی نیست که در کوئری زیر آورده شود.
در مثال اول می خواهیم ، لیست سال را، از 38 سال قبل از سال جاری و تا ۵۰ سال بعد از شروع داشته باشیم:
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:
1360 1360
1361 1361
1362 1362
1363 1363
1364 1364
1365 1365
1366 1366
1367 1367
1368 1368
1369 1369
... ...
1402 1402
1403 1403
1404 1404
1405 1405
1406 1406
1407 1407
1408 1408
1409 1409
در مثال دوم که بسیار کاربردی و تکنیکی می باشد. می خواهیم که هر سال بصورت داینامیکی ، سال جاری به لیست سال ما اضافه شود. در این مثال لیست ما ازسال ۱۳۰۰ تا سال جاری ایجاد شده است:

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:
1301 1301
1302 1302
1303 1303
1304 1304
1305 1305
1306 1306
1307 1307
1308 1308
1309 1309
1310 1310
1311 1311
1312 1312
... ...
1395 1395
1396 1396
1397 1397
1398 1398
حال اگر میخواهیم فقط از یک سالی به بعد را درلیست مشاهده کنیم کافیست که یک شرط به کوئری قبلی اضافه کنیم. مثلا از سال ۱۳۹۵ به بعد تا سال جاری در لیست مشاهده شود:
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:
1396 1396
1397 1397
1398 1398
امیدوار هستم که مفید واقع شده باشد.
5/5 - (1 امتیاز)

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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

keyboard_arrow_up
Oracle APEX Capabilities (OAC)