PDA

View Full Version : تبديل تاريخ به شمسي و محاسبه اختلاف بين دو تاريخ



soroosh_i58
یک شنبه 17 آذر 1387, 08:48 صبح
من توي برنامم از fardate.dll استفاده كردم كه وقتي تاريخ شمسي رو بهش ميدي به تاريخ ميلادي تبديل ميكنه و از طريق توابع مربوط به تاريخهاي ميلادي تونستم اختلاف بين دو تاريخ شمسي رو اينجوري به دست بيارم. اما اين تكنيك براي به دست آوردن اختلاف 2 تاريخ مشخص مفيد هست ولي اگه بخوام توي بانك اطلاعاتيم كه 5000 تا ركورد داره تمام كساني كه تاريخ تولدشون مثلا بعد از 01/01/1370 هستند رو استخراج كنم به مشكل بر ميخورم چون منطقي نيست اين پردازشهارو روي تك تك ركوردها انجام بدم. ميخوام يه جوري از دستورات sql استفاده كنم. مثلا تي برنامم يك query بنويسم كه اينجوري باشه:
select * from table1
where columndate>#1370/01/01#
به نظر شما راهش چيه؟

mostafaaa
یک شنبه 17 آذر 1387, 09:19 صبح
سلام دوست من
بهتر بود که تاریخ ها رو درون بانکتون به صورت میلادی ذخیره میکردید و هر وقت نیاز به نمایش اونها داشتید تبدیلشون میکردید به شمسی و برای گزارش گیری هم به راحتی میتونستید از کوئری های SQL استفاده کنید.

s_ahmadneya
یک شنبه 17 آذر 1387, 10:56 صبح
من توي برنامم از fardate.dll استفاده كردم كه وقتي تاريخ شمسي رو بهش ميدي به تاريخ ميلادي تبديل ميكنه و از طريق توابع مربوط به تاريخهاي ميلادي تونستم اختلاف بين دو تاريخ شمسي رو اينجوري به دست بيارم. اما اين تكنيك براي به دست آوردن اختلاف 2 تاريخ مشخص مفيد هست ولي اگه بخوام توي بانك اطلاعاتيم كه 5000 تا ركورد داره تمام كساني كه تاريخ تولدشون مثلا بعد از 01/01/1370 هستند رو استخراج كنم به مشكل بر ميخورم چون منطقي نيست اين پردازشهارو روي تك تك ركوردها انجام بدم. ميخوام يه جوري از دستورات sql استفاده كنم. مثلا تي برنامم يك query بنويسم كه اينجوري باشه:
select * from table1
where columndate>#1370/01/01#
به نظر شما راهش چيه؟
اولا" باید فیلدت از نوع تاریخ باشد ثانیا باید از دستور betwen استفاده کنی فعلا" حضور ذهن ندارم بعدها کاملش می کنم

mostafaaa
یک شنبه 17 آذر 1387, 11:47 صبح
اولا" باید فیلدت از نوع تاریخ باشد ثانیا باید از دستور betwen استفاده کنی فعلا" حضور ذهن ندارم بعدها کاملش می کنمسلام دوست من
همونطور که به دوستمون هم گفتم باید تاریخ رو با فرمت میلادی توی DB ذخیره بشه تا بشه از کوئری های SQL برای انجام تراکنشهامون استفاده کنیم.
استفاده از فرمت تاریخ شمسی ممکنه ظاهرا مشکلی نداشته باشه و در DB هم ذخیره بشه ولی در زمان گزارش گیری، خروجی درستی رو به ما نخواهد داد.
و در آخر اگه فرض رو بر این بزاریم که دوستمون تاریخ رو به صورت میلادی و در فیلدی که DataType اون DateTime هستش ذخیره کرده، همون کوئری که خودشون نوشتن مقادیر بیشتر از تاریخ مورد نظرشون رو برمیگردونه و احتیاجی به استفاده از Between ندارند.
موفق باشید

SELECT *
FROM Table1
WHERE DateField > #12/4/2008#

s_ahmadneya
یک شنبه 17 آذر 1387, 12:57 عصر
سلام دوست من
همونطور که به دوستمون هم گفتم باید تاریخ رو با فرمت میلادی توی DB ذخیره بشه تا بشه از کوئری های SQL برای انجام تراکنشهامون استفاده کنیم.
استفاده از فرمت تاریخ شمسی ممکنه ظاهرا مشکلی نداشته باشه و در DB هم ذخیره بشه ولی در زمان گزارش گیری، خروجی درستی رو به ما نخواهد داد.
و در آخر اگه فرض رو بر این بزاریم که دوستمون تاریخ رو به صورت میلادی و در فیلدی که DataType اون DateTime هستش ذخیره کرده، همون کوئری که خودشون نوشتن مقادیر بیشتر از تاریخ مورد نظرشون رو برمیگردونه و احتیاجی به استفاده از Between ندارند.
موفق باشید

SELECT *
FROM Table1
WHERE DateField > #12/4/2008#

دقیقا" حق با شماست اما برای یک محدوده تاریخ (از تاریخ xتا تاریخy ) باید حتما" ازbetween استفاده کرد