خانه > توابع تاریخ شمسی برای MySql > توابع تاریخ شمسی جهت استفاده در Mysql

توابع تاریخ شمسی جهت استفاده در Mysql

این پروژه رو تقدیم می کنم به سازمان مدیریت برنامه نویسان php

در تمامی پروژه ها یی که نیاز به تاریخ شمسی هست. برنامه نویسان با مشکلات خاصی ربرو هستند. در خیلی از تالار های گفتگو  بارها و بارها خوندم که برای ذخیره تاریخ و محاسبات دقیق تر بر روی فیلد هایی که نوع انها تاریخ هست. بهتر هست تاریخ رو به صورت میلادی و به صورت timestamp نگهداری کنیم.خوب این روش بسیار کار آمد هست و بهینه . زیرا میتونیم با داشتن یک تاریخ  میلادی ، تمامی تاریخ های دیگر همچون شمسی و قمری را استخراج کنیم. اما این روش معایب خودش رو همراه داره.این معایب رو با بیان یک مثال بررسی می کنم:

در Mysql توابع بسیار قدرتمند و مهمی برای کار با مقادیر نوع تاریخ و زمان وجود دارد. که برنامه نویس میتواند بدون درگیر شدن با کد نویسی و با استفاده از یک دستور در خط کوئری خود به نتیجه دلخواه خودش برسه. به عنوان مثال فرض کنید. میخواهیم یک آرشیو ماهیانه برای سیستم خبری ایجاد کنیم.

SELECT month(FROM_UNIX(regdate) as mo, SELECT year(FROM_UNIX(regdate) as yr, COUNT(*) as total FROM table GROUP BY mo,yr ORDER BY mo DESC yr DESC

برنامه نویس با مثال بالا به راحتی می تواند آرشیو ماهیانه مطالب سیستم خود را ایجاد کند. البته به میلادی.
اما برای آرشیو ماهیانه شمسی آیا جواب گو هست. جواب این هست. خیر!!!.

برای این خواسته برنامه نوبسان روش های متنوعه ای رو بسته به نیاز خود به اجرا میگزارند. عده ای یک فیلد با جدول خود اضافه می کنند و مقادیر تاریخ شمسی را درج می کنند.عده ای دیگر می یایند تاریخ شروع مطالب . تاریخ پایانی رو پیدا میکنند. و بعد از تجزیه و تحلیل کردن آرشیو ماهانه را استخراج می کنند.تمامی روش های موجود دارای پردازش کم و بیش بالایی هستند. تا به نتیجه دلخواه برسند.

من در این پروژه با استفاده از قابلیت تعریف پروسیجر و تابع که در نسخه ۵.x.x  به بعد ارائه شد.  یک سری تابع  ، همانند توابع MySql شبیه سازی کردم با این تفاوت که این توابع نتیجه را به صورت شمسی بر میگردانند.

در این پروژه ۴ تا بع کاربردی date(),month(),year(), monthname() شبیه سازی شده.

برای استفاده از این توابع شما کافیست مراحل زیر را انجام بدید.

۱- دریافت فایل توابع : دریافت

۲- ایپورت کردن فایل در دیتابیس مورد نظر

بعد از انجام مراحل بالا برای تست توابع می تونید. از این کوئری برای تست استفاده کنید.


SELECT pnum(pdate(NOW())),pyear('2009-09-22'),pmonth('2009-09-22') , pmonthname( NOW());

مثال آرشیو ماهیانه


SELECT pmonth(FROM_UNIX(regdate) as mo, SELECT pyear(FROM_UNIX(regdate) as yr, COUNT(*) as total FROM table GROUP BY mo,yr ORDER BY mo DESC yr DESC

اگر نتیجه گرفتید. پس براحتی می توانید از این توابع کمال استفاده را ببرید.

نکته : در حال حاضر فقط می توان این توابع را از نسخه ۵.۱.به بالا استفاده کرد

لطفا نظرات و پیشنهادات خود را جهت کامل کردن این توابع در قسمت کامنت قرار بدید.

Vote on iDevCenter
  1. علی مخلصی
    ۵ مهر ۱۳۸۸ در ۱۶:۳۱ | #1

    تلاش علمی – عملی شما به همراه آزاد اندیشی فکری شما برای در اختیار قرار حاصل تلاش خود در اختیار دیگر عزیزان قابل تقدیره.
    صمیمانه از شما تشکر می کنم و براتون آزروی موفقیت دارم

    با احترام
    مخلصی

  2. ۵ مهر ۱۳۸۸ در ۱۷:۲۸ | #2

    ممنونم، خیلی بدرد بخوره! راستی چه عجب آپ کردی!!! خیلی وقت بود منتظر بودم! ;)

  3. ۵ مهر ۱۳۸۸ در ۱۸:۱۹ | #3

    مثل همیشه قابل تقدیر و فوق‌العاده.
    ممنون صالح جان

  4. ۵ مهر ۱۳۸۸ در ۱۹:۲۰ | #4

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

  5. ۶ مهر ۱۳۸۸ در ۲۳:۰۲ | #5

    عالی‌ه صالح جان، مرسی واقعا :)

  6. هادی
    ۱۱ مهر ۱۳۸۸ در ۱۵:۳۳ | #6

    خیلی عالی است

  7. ۵ آبان ۱۳۸۸ در ۱۳:۵۱ | #7

    برای نسخه ۵ اگر بود ، خیلی بهتر می شد :دی

  8. Nayyereh
    ۱۳ آبان ۱۳۸۸ در ۱۲:۳۴ | #8

    خیلی عالی بود. مرسی. کمک بزرگی کردید.

  9. احسان
    ۱۳ اسفند ۱۳۸۸ در ۱۲:۴۶ | #9

    ممنونم به خاطر زحمتی که کشیدید

  10. ۱۶ اسفند ۱۳۸۸ در ۱۴:۲۶ | #10

    سلام و خسته نباشید
    مطلب جالبی بود … یک برنامه نویس حالیش نمیشه چه سوالی رو کجا بپرسه …

    من میخواستم واسه نرم افزار(حسابداری) که خودم دارم مینویسم دیتابیس طراحی کنم برنامم رو تو visual Studio 2008 به زبان C# نوشتم آیا برای طراحی دیتابیس از Sql Server خود ویژال استفاده کنم به مشکل و محدودیتی بر نمیخورم مثل بک آپ گیری و … ؟ اگر این امکان وجود نداره از کدام ورژن Sql Server استفاده کنم؟
    چه تفاوتی میکنه که دیتابیس رو تو خود ویژال یا جداگانه در SQl Serverطراحی کنیم؟

  11. admin
    ۱۶ اسفند ۱۳۸۸ در ۱۴:۳۳ | #11

    @اوژن استوار
    ممنون دوست عزیز
    در جواب سوال شما باید خدمتتون عرض کنم که بنده برنامه نویس وب هستم. با زبان پی اچ پی کار میکنم. و کلا با محصولات ماکروسافتی میانه خوبی ندارم.

    اما میتونم یک پاسخ خدمتتون بدم. اون هم این هست. که این گونه ابزار های برای ایجاد پل ارتباطی بین شمای کد نویس و سرویس دهنده شما هست. و قالبا به صورت ویزاردی ایجاد میشوند تا به روند کار شما سرعت ببخشند.

    من چند سالی هست که قیافه ویژاول استدیو رو ندیدم. اما تا اونجا که یادم هست. اونچه مورد نیاز شما هست رو جواب گو هست. اما اگر به دنبال کار حرفه با mssql هستید. بهتره از خود SQL Server Management Studio استفاده کنید.

  1. بدون بازتاب