View Full Version : سوال: استفاده از تاريخ شمسي؟
pishgamict
دوشنبه 30 دی 1387, 14:55 عصر
با سلام.
بنده مي خوام تاريخ شمسي را در اراكل 10g استفاده كنم، آيا كسي روشي سراغ داره؟ اصلا در اين مراكزي كه در كشور در حال حاضر از اراكل استفاده مي كنند از چه روشي براي حل مشكل تاريخ شمسي استفاده مي كنند؟
اطلاعات اوليه:
1)روشهاي دورزدني را هم همه مي دانيم كه از string استفاده نماييم، يعني تاريخ را بصورت رشته در DB ذخيره كنيم اما به نظر روش جالبي نيست، مگر مجبور به استفاده از اين روش شويم.
2) اين را هم مي دانيم كه تاريخ شمسي جزء تقويمهاي پيش فرض اراكل است و با دستوراتي مي توان آن را پيش فرض اراكل كرد اما در استفاده مشاهده مي كنيم كه مثلا ماههاي سال را با اسامي انگليسي مي نويسد مثلا مرداد را امرداد و آن هم با كاراكترهاي انگليسي مي نويسد كه در برنامه هاي فارسي قابل استفاده نيستند.
آيا مي توان به جدولي كه متن ماهها در آن نوشته شده است دسترسي پيدا كرد و متن آنها را در صورتي كه رشته باشند به چيزي كه صحيح است تغيير بدهيم، لطفا كمك كنيد؟
s_ahmadneya
پنج شنبه 03 بهمن 1387, 07:43 صبح
:تشویق:من خودم تاریخ را به صورت میلادی ذخیره می کنم و بعد در برنامه به شمسی تبدیل می کنم .این روش را در sql هم استفاده می کردم .اما در انجا یه تابع در خود بانک نوشته بودم و در هنگام select ان تابع را در خود سلکت استفاده می کردم ونتیجه تاریخ شمسی را به برنامه تحویل می داد متاسفانه من تابع نویسی در اوراکل را بلد نیستم اگر کسی بتونی این کار را بکنه مشکل را می شود برطرف کرد.
مثلا اگه تابع miladi_to_shamsi باشه و feild1 هم تاریخ میلادی
انوقت کد زیر تاریخ شمسی را برمی گرداند
select miladi_to_shamsi (feild1) from tabel 1
من خودم پیگیر این کار هستم از دوستان خواهش می کنم اگه می تونند کمک کنند
pishgamict
پنج شنبه 03 بهمن 1387, 07:54 صبح
با تشكر از دوست عزيز كه پاسخ دادن، اما متاسفانه ايشون كد تابعي كه نوشتن را نشان ندادند تا بشه راجع اون قضاوت كرد. ممنمون ميشم اگه كدي كه براي تابعي كه گفتيد را پست كنيد.
لازم به توضيح هستش كه از اين روشها مي تونيم استفاده كنيم اما بيشتر به دنبال اين هستم كه اگر بشه معادل فيلدهاي روز، ماه و ... را در اراكل كه معادل فينگليش اونها هست را عوض كنيم تا هندل كردن تاريخ را به عهده خود اراكل بگذاريم.
بنده جدول و فيلد هاي مربوطه را پيدا كردم اما متاسفانه نمي شه شايد هم من بلد نبود عوضشون كنم.
در هر صورت راهنمايي كنيد، اي با تجربه ها كجاييد؟؟؟؟
s_ahmadneya
پنج شنبه 03 بهمن 1387, 07:58 صبح
با تشكر از دوست عزيز كه پاسخ دادن، اما متاسفانه ايشون كد تابعي كه نوشتن را نشان ندادند تا بشه راجع اون قضاوت كرد. ممنمون ميشم اگه كدي كه براي تابعي كه گفتيد را پست كنيد.
لازم به توضيح هستش كه از اين روشها مي تونيم استفاده كنيم اما بيشتر به دنبال اين هستم كه اگر بشه معادل فيلدهاي روز، ماه و ... را در اراكل كه معادل فينگليش اونها هست را عوض كنيم تا هندل كردن تاريخ را به عهده خود اراكل بگذاريم.
بنده جدول و فيلد هاي مربوطه را پيدا كردم اما متاسفانه نمي شه شايد هم من بلد نبود عوضشون كنم.
در هر صورت راهنمايي كنيد، اي با تجربه ها كجاييد؟؟؟؟
دوست عزیر من که گفتم در اوراکل این کار را بلد نیستم !
http://barnamenevis.org/forum/showthread.php?p=668631#post668631
pishgamict
پنج شنبه 03 بهمن 1387, 11:41 صبح
عزيز دل برادر، متوجه شديم شما نوشتن تابع در اراكل را بلد نيستيد، كمي دقت مي كرديد منظور من تابعي كه در SQL Server يا MySQL يا DB2 يا ... نوشتيد بود.
mohammad_P
یک شنبه 06 بهمن 1387, 17:44 عصر
فیلد تاریخ در اوراکل می بایست به صورت تاریخ با فرمت میلادی نگهداری شود و هنگام دریافت اطلاعات می توانیم با استفاده از NLS_CALENDAR=PERSIAN تاریخ میلادی را تبدیل به تاریخ شمسی با هر فرمتی که بخواهیم تبدیل کنیم.
s_ahmadneya
یک شنبه 06 بهمن 1387, 20:29 عصر
فیلد تاریخ در اوراکل می بایست به صورت تاریخ با فرمت میلادی نگهداری شود و هنگام دریافت اطلاعات می توانیم با استفاده از NLS_CALENDAR=PERSIAN تاریخ میلادی را تبدیل به تاریخ شمسی با هر فرمتی که بخواهیم تبدیل کنیم.
میشه یکم بیشتر توضیح بدهید مثلا" چطور در دستورselect استفاده نماییم
Mohammadvb6
شنبه 26 بهمن 1387, 21:00 عصر
سلام دوست عزیز
باید بدونید که اوراکل دارای تاریخ شمسی هست و نیاز به اجرا کردن هیچ کامپایلری نیست
فقط لازمه در sql pluse
وارد کنید ::::
set nls_calendar=persian
بعد برای مشاهده واردکنید ::
select sysdate from dual
اگه سوال در مورد oracle داشتید میتونید مستقیما با مسنجر با من در ارتباط باشید
behi_best2002@yahoo.com
behrad61@aim.com
من همیشه on هستم :چشمک:
pishgamict
چهارشنبه 30 بهمن 1387, 10:43 صبح
با تشكر از همه دوستان
در ابتدا متذكر بشوم كه بنده مي دونستم كه با تغيير NLS_Session ميشه تقويم اراكل را فارسي كرد اما شايد درست نتونسته باشم منظورم را بيان كنم: اگر NLS_Session را هم Persian كنيم فيلدهاي تاريخ در Query ها چيزي نمايش داده مي شود كه غير قابل نمايش براي كاربره مثلا مرداد ماه را امرداد آنهم به صورت فنگليش مي نويسد، سوال من اينست كه آيا مي شود متن نمايش داده شده را تصحيح كرد، مثلا Amordad را همان مرداد خودمان نمايش بده.
لطفا دوستان توضيح كامل و جامع بدهند و اگر ايميل يا ID هم معرفي مي كنند معتبر باشه كه بشود با آنها تماس برقرار كرد.
با تشكر
s_ahmadneya
چهارشنبه 30 بهمن 1387, 14:07 عصر
با تشكر از همه دوستان
در ابتدا متذكر بشوم كه بنده مي دونستم كه با تغيير NLS_Session ميشه تقويم اراكل را فارسي كرد اما شايد درست نتونسته باشم منظورم را بيان كنم: اگر NLS_Session را هم Persian كنيم فيلدهاي تاريخ در Query ها چيزي نمايش داده مي شود كه غير قابل نمايش براي كاربره مثلا مرداد ماه را امرداد آنهم به صورت فنگليش مي نويسد، سوال من اينست كه آيا مي شود متن نمايش داده شده را تصحيح كرد، مثلا Amordad را همان مرداد خودمان نمايش بده.
لطفا دوستان توضيح كامل و جامع بدهند و اگر ايميل يا ID هم معرفي مي كنند معتبر باشه كه بشود با آنها تماس برقرار كرد.
با تشكر
جالبه من این موردی که شما گفتید بلدید را بلد نیستم هر کاری کردم نتونستم QUERYبگیرم که تاریخ شمسی را بگیرم حتی با ان فرمتی که جنابعالی گفته ای
اما کانورتش را بلدم من این را روی تاریخ میلادی چک کردم جواب داد
SELECT LOG_DATE,
TO_CHAR(LOG_DATE,'YYYY')
||
DECODE(TO_CHAR(LOG_DATE,'MM'),12,'اسفند',
11,'بهمن',
10,'دی'
,'NO DECODE')
||
TO_CHAR(LOG_DATE,'DD')
FROM T_LOG
WHERE ROWNUM<10
خواهش می کنم برام توضیح بدهید چطوری این NLS_Session=PERSHIN را اعمال کنم
pishgamict
پنج شنبه 01 اسفند 1387, 09:54 صبح
با تشکر از دوست عزیز
عذر خواهی بنده را قبول کنید چون در تایپ کردن دقت نکردم یعنی همان لحظه که داشتم این پست را می نوشتم به سرور هم remote شده بودم و درگیر کار با session و این حرفها بودم و اشتباها بجای nls_calendar نوشتم nls_session.
با عرض پوزش مجدد
اما در مورد قسمت بعد پست دوست عزیز باید بگم نمی دونم ایشون با من شوخی کردن چون من تو بحث اراکل تازه کارم و شاید چیزی را اشتباه بگم یا شکسته نفسی فرمودند در هر صورت همانطور که در پستهای قبلی هم دوستان اشاره کردن اگر nls_calendar را مساوی persian قرار بدهید و آنگاه هر query بگیرید که در آن فیلد تاریخ هم باشد نتیجه را خواهید دید.
pishgamict
پنج شنبه 01 اسفند 1387, 10:00 صبح
با تشکر از دوست عزیز
عذر خواهی بنده را قبول کنید چون در تایپ کردن دقت نکردم یعنی همان لحظه که داشتم این پست را می نوشتم به سرور هم remote شده بودم و درگیر کار با session و این حرفها بودم و اشتباها بجای nls_calendar نوشتم nls_session.
با عرض پوزش مجدد
اما در مورد قسمت بعد پست دوست عزیز باید بگم نمی دونم ایشون با من شوخی کردن چون من تو بحث اراکل تازه کارم و شاید چیزی را اشتباه بگم یا شکسته نفسی فرمودند در هر صورت همانطور که در پستهای قبلی هم دوستان اشاره کردن اگر nls_calendar را مساوی persian قرار بدهید و آنگاه هر query بگیرید که در آن فیلد تاریخ هم باشد نتیجه را خواهید دید.
amir1982
جمعه 21 فروردین 1388, 12:56 عصر
استفاده از NLS_CALENDAR نمیتونه کمک کنه به دلایل فراوون. اولیش اینکه به تأیید خود اوراکل حتی در نسخه 10 هم باگش برطرف نشده. دومیش هم مسئله همون نام ماهها هست که البته خیلی مهم نیست و به راحتی با دیکد درست میشه اما از همه مهمتر اینه که شما مشکل کبیسه رو دارید. من تا حالا تو 4 جای مختلف دیدم که اینکار رو با نوشتن تابع تبدیل میلادی به شمسی با محاسبه دو نوع سال کبیسه 4 ساله و 33 ساله نوشتن. سیستمهای جامع سایپا، ایران خودرو، ذوب آهن اصفهان، بانکهای مسکن و رفاه برای سیستم ATM . تو تمام این پروژه ها از تابعهائی که خودشون نوشتن استفاده کردن.
مسئله اصلی تو نوشتن تابع دیتا بیسی که اینکار رو انجام بده منطق برنامه نویسیش هست. شما میتونید درصورتیکه تابع رو حتی با شبه کد بنویسید با PL/SQL تبدیل کنید به آبجکت اوراکل. من به تابعی که الان تو محل کارم استفاده میشه دسترسی دارم اما نمیتونم کدش رو در اختیارت بذارم ولی میتونم بوسیله اون کمکت کنم. در هرصورت صرفاً تا این حد کمک از من برمیاد. اگر اطلاعات بیشتر خواستی اطلاع بده
s_ahmadneya
دوشنبه 24 فروردین 1388, 15:13 عصر
استفاده از NLS_CALENDAR نمیتونه کمک کنه به دلایل فراوون. اولیش اینکه به تأیید خود اوراکل حتی در نسخه 10 هم باگش برطرف نشده. دومیش هم مسئله همون نام ماهها هست که البته خیلی مهم نیست و به راحتی با دیکد درست میشه اما از همه مهمتر اینه که شما مشکل کبیسه رو دارید. من تا حالا تو 4 جای مختلف دیدم که اینکار رو با نوشتن تابع تبدیل میلادی به شمسی با محاسبه دو نوع سال کبیسه 4 ساله و 33 ساله نوشتن. سیستمهای جامع سایپا، ایران خودرو، ذوب آهن اصفهان، بانکهای مسکن و رفاه برای سیستم ATM . تو تمام این پروژه ها از تابعهائی که خودشون نوشتن استفاده کردن.
مسئله اصلی تو نوشتن تابع دیتا بیسی که اینکار رو انجام بده منطق برنامه نویسیش هست. شما میتونید درصورتیکه تابع رو حتی با شبه کد بنویسید با PL/SQL تبدیل کنید به آبجکت اوراکل. من به تابعی که الان تو محل کارم استفاده میشه دسترسی دارم اما نمیتونم کدش رو در اختیارت بذارم ولی میتونم بوسیله اون کمکت کنم. در هرصورت صرفاً تا این حد کمک از من برمیاد. اگر اطلاعات بیشتر خواستی اطلاع بده
از راهنمایی شما متشکرم اگه کدش را بگذاری ممنونم اما من در حال حاضر تبدیل را در سی شارپ انجام میدهم بنظر شما اشکالی داره ؟
<l@ve_f@re>
دوشنبه 14 اردیبهشت 1388, 09:28 صبح
با سلام
برای ذخیره تاریخ درون بانک اراکل می توان تاریخ را بصورت عددی ذخیره نمود برای نمونه 13880101 و بعداً در نمایش تاریخ آنرا در source برنامه به شکل تاریخ فارسی 1388/01/01 نمایش داد و یا با استفاده از یک function درون اراکل این کار را انجام داد ولی استفاده از function سرعت دسترسی به داده ها را کند می کند و ممکن است درون query ها و یا view ها خودش را نشان دهد. ولی بهترین راه ، استفاده از تاریخ میلادی و نوع date خود اراکل است. برای نمایش و تبدیل تاریخ میلادی به شمسی کافی است از دستور زیر استفاده کنید :
select to_char(field_date,'yyyy/mm/dd','nls_calendar=persian' ) as field_DAte from tbl
در این صورت تاریخ به صورت فارسی و با فرمت yyyy/mm/dd نمایش داده خواهد شد.
"آنچه از علم برتر است تجربه"
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.