zoghal / PersianDate4MySQL

pDate is a Gregorian / Jalali(Shamsi) date convertor functions for MySQL 5.1+
http://saleh.soozanchi.ir/1388/07/05/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AC%D9%87%D8%AA-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-mysql/
182 stars 67 forks source link

امکان استفاده از توابع برای رشته اعداد فارسی در تاریخ #33

Open okaeiz opened 2 years ago

okaeiz commented 2 years ago

عرض سلام و احترام؛ برای استفاده از تابع GDATESTR - که تاریخ شمسی را به عنوان رشته (string) گرفته و مقدار تاریخ-زمان (datetime) میلادی را به عنوان خروجی تحویل می‌دهد - امکان استفاده از تاریخ فارسی وجود ندارد. آیا راه حلی برای این مسئله وجود دارد؟

به عنوان مثال، وقتی از تابع به شکل زیر استفاده می‌کنیم، مشکلی ندارد و به درستی کار می‌کند:

SELECT gdatestr("1400/12/12");

اما وقتی همین رشته را به فارسی تحت عنوان آرگومان به تابع می‌دهیم، تابع به درستی کار نمی‌کند.

SELECT gdatestr("۱۴۰۰/۱۲/۱۲");

zoghal commented 1 year ago

درود بر شما هدف اولیه این پروژه یک مبدل تاریخ از میلادی به شمسی و یکسری توابع کاربردی جهت اعمال شرط گذاری بر روی تاریخ میلادی، اما بر اساس قواعد تاریخ شمسی بود. در ادامه هم دوستان دیگری در این پروژه مشارکت کردند و توابع دیگری مثل شمسی به میلادی رو به این پروژه افزودند.

نیازی که شما به آن اشاره کردید! شدنی است. اما نمی‌دونم تا چقدر کاربردی و بهینه است. به همین خاطر تصمیم گرفتم نسخه ۳ این پروژه رو بر اساس نیاز شما استارت بزنم:

https://github.com/zoghal/PersianDate4MySQL/tree/dev-v3

در این نسخه یک تابع جدید اضافه کردم به نام: NUM_FA2EN() که می‌توانید از آن بصورت زیر استفاده کنید:

SELECT gdatestr(NUM_FA2EN("۱۴۰۰/۱۲/۱۲"));

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

okaeiz commented 1 year ago

سلام و احترام؛ با تشکر از همراهی و راهنمایی شما. تابعی که به کتابخانه اضافه کردید فوق‌العاده کاربردی و عالی است و به خوبی کار می‌کند. می‌خواستم خواهش کنم در صورت امکان، تابعی طراحی بفرمایید که حاصل تابع pdate را با ارقام فارسی نشان دهد. این کارکرد برای مواقعی که نیازمند گزارش‌گیری از یک دیتابیس هستیم و قصد داریم این گزارش را در معرض دید عموم افراد قرار دهیم، مفید خواهد بود. به عنوان مثال:

SELECT pdate(created_at) FROM books;

این استیتمنت، خروجی زیر را تحویل می‌دهد:

1401-12-10 08:33:19

اگر بتوان خروجی فوق را با ارقام فارسی، مثلا چیزی شبیه به رشته‌ی زیر نشان داد عالی است.

۱۴۰۱-۱۲-۱۰ ۰۸:۳۳:۱۹

پی‌نوشت: اگر تصمیم به ایجاد این تابع گرفتید، مشتاقم مراحل این کار را ملاحظه نموده و بیاموزم.

zoghal commented 1 year ago

سلام و احترام؛ با تشکر از همراهی و راهنمایی شما. تابعی که به کتابخانه اضافه کردید فوق‌العاده کاربردی و عالی است و به خوبی کار می‌کند. می‌خواستم خواهش کنم در صورت امکان، تابعی طراحی بفرمایید که حاصل تابع pdate را با ارقام فارسی نشان دهد. این کارکرد برای مواقعی که نیازمند گزارش‌گیری از یک دیتابیس هستیم و قصد داریم این گزارش را در معرض دید عموم افراد قرار دهیم، مفید خواهد بود. به عنوان مثال:

SELECT pdate(created_at) FROM books;

این استیتمنت، خروجی زیر را تحویل می‌دهد:

1401-12-10 08:33:19

اگر بتوان خروجی فوق را با ارقام فارسی، مثلا چیزی شبیه به رشته‌ی زیر نشان داد عالی است.

۱۴۰۱-۱۲-۱۰ ۰۸:۳۳:۱۹

پی‌نوشت: اگر تصمیم به ایجاد این تابع گرفتید، مشتاقم مراحل این کار را ملاحظه نموده و بیاموزم.

سلام مجدد هر چند با اضافه کردن اینجور فیچر‌ها شدیدا مخالفم، چون مروبط به لایه نمایش است و از طرفی همچین مواردی شدیدا باعث کندی اجرای کوئری می‌شوند، اما چون استفاده آن اختیاری است، چشم سر فرصت اضافه‌اش میکنم و نسخه جدیدش را ریلیز میکنم.

okaeiz commented 1 year ago

سلام و ارادت؛ من به برنچ dev یک کامیت کردم؛ مورد تایید شما هست؟ اگر زودتر ران بشه عالیه چون شدیدا نیازمندیم.