باگ تاریخ شمسی در دیتابیس اوراکل
NLS_CALENDAR اوراکل بصورت Persian تنظیم نشده است. هر بار که بخواهیم اختلافی را بدست آوریم و یا اینکه ماه را کم و زیاد کنیم ملاک عملکردش همان میلادی می باشد. مخصوصا وقتی بخواهیم اختلاف زمانی را بدست آوریم که بین سال کبیسه میلادی می باشد.
سال شمسی دارای ۳۶۵ روز می باشد و در سالهای کبیسه ، معادل ۳۶۶ روز هست.
در این خصوص چند سال پیش سوالی را در فروم اوراکل مطرح کردم که نشان دهنده همین موضوع می باشد
select To_DATE(TO_CHAR(to_date('1390/10/30','yyyy/mm/dd'),'YYYY/MM/DD','nls_calendar=persian'),'YYYY/ MM/DD','nls_calendar=persian') - To_DATE(TO_CHAR(to_date('1389/11/01','yyyy/mm/dd'),'YYYY/MM/ DD','nls_calendar=persian'),'YYYY/MM/DD','nls_calendar=persian') dd from dual
The Result = 364
همانطور که مشاهده می کنید در دیتابیس اوراکل تعداد روزهای یکسال رو برابر 364 روز برگردانده است. علت آن هم این است که این تاریخ ها بین سال کبیسه میلادی قرار گرفته است.
Oracle Forum: https://community.oracle.com/message/12726061#12726061