PDA

View Full Version : جستجو فقط براساس سال شمسی درون تاریخ میلادی



bagherok
جمعه 21 شهریور 1393, 01:18 صبح
فیلد تاریخ درون دیتابیس که از نوع date و بصورت
yyyy-mm-dd
2014-9-12
ذخیره شده.

حالا چطوری میشه فقط سال و ماه رو به شمسی جستجو کرد
مثلا فقط سال 93
یا فقط مرداد 93 رو

saeedvir
جمعه 21 شهریور 1393, 07:50 صبح
راحت ترین کار اینه که تاریخ رو به صورت INT (عدد) ذخیره کنید
مثلا 930303 بعد خیلی راحت میشه جست و جو کرد.

mohammad reza beizavi
جمعه 21 شهریور 1393, 08:09 صبح
درود، بانک اطلاعاتی که استفاده می کنید چی هست؟؟؟

mohammad reza beizavi
جمعه 21 شهریور 1393, 08:29 صبح
توصیه می کنم هیچوقت از عدد یا رشته برای نگهداری تاریخ استفاده نکنی، صرفا از نوع تاریخ (datetime) استفاده کن
اگر از MySQL استفاده می کنی می تونی از function توی برنامه استفاده کنی.
البته این function ها وجود داره و نیازی به نوشتن دوباره ندارید
اونایی که فکر کردم به دردتون می خوره رو توی پیوست گذاشتم
البته اینجور ازش استفاده کن:
SELECT pdate ('2014-09-12 12:00:23'); result=> 1392/06/21 12:00:23
SELECT pday('2014-09-12 12:00:23'); result=>21
SELECT PMONTH('2014-09-12 12:00:23'); result=>09
SELECT pmonthname('2014-09-12 12:00:23'); result=>شهریور
SELECT pyear('2014-09-12 12:00:23'); result=>1392

mohammad reza beizavi
جمعه 21 شهریور 1393, 08:30 صبح
فایل پیوستشم اینجاست
کافیه همین فایلا رو توی mysql اجرا کنی تا بشن function و ازشون استفاده کنی

bagherok
جمعه 21 شهریور 1393, 09:02 صبح
mysql

بله
اما مشکل اینه که
میخوام فقط بدون وارد کردن ماه و روز
و فقط باوارد کردن سال مثلا 93 از بین تاریخ های ثبت شده بصورت میلادی
جستجو رو انجام بده

mohammad reza beizavi
جمعه 21 شهریور 1393, 09:08 صبح
منظورتون اینه که می خواید تو اطلاعات جدول تمام رکوردهایی رو به دست بیارید که سالشون سال 93 هست؟؟؟

mohammad reza beizavi
جمعه 21 شهریور 1393, 09:13 صبح
اگر منظورتون همین بالاییه باشه با استفاده از همون function ها اینجور میشه

SELECT * FROM `table1` WHERE pyear(`table1`.`date`) = '1393'

bagherok
جمعه 21 شهریور 1393, 09:32 صبح
تاریخ به میلادی ذخیره شده

bagherok
جمعه 21 شهریور 1393, 09:38 صبح
چیزی که الان به ذهنم میرسه اینه که وقتی تاریخ بصورت 93 جستجو میشه
تاریخ شروع به اینصورت
93-01-01
و به میلادی تبدیل بشه
2014-3-21
و تاریخ
93-12-29
هم به میلادی
2015-3-20
بعد جستجو انجام بشه بین 2 تاریخ میلادی

mohammad reza beizavi
جمعه 21 شهریور 1393, 09:48 صبح
یعنی الان می خوای رکوردهایی که تاریخشون بین 29-12-93 و 01-01-93 رو به دست بیارید؟؟؟

bagherok
جمعه 21 شهریور 1393, 09:52 صبح
هم آره هم نه

وقتی کاربر سال 93 رو وارد میکنه میخوام تمام سفارش هایی که تو 93 ثبت شده رو نشون بدم.
خوب چیزی که به ذهنم میرسه همون بالایی هست که نوشتم.

mohammad reza beizavi
جمعه 21 شهریور 1393, 09:56 صبح
خب داداش من کد رو امتحان کن!!!
همون کوئری آخری همین کار رو میکنه
من الان روی پروژه کار میکنم
دقیقا همین کار رو دارم انجام میدم

bagherok
جمعه 21 شهریور 1393, 10:23 صبح
تو php myadmin جواب نداد
جدول order
فیلد date
تاریخ ثبت شده
2014-09-11


SELECT * FROM `order` WHERE pyear(`order`.`date`) = '1393'


خطا

1305 - FUNCTION ekala.__mydiv does not exist

bagherok
جمعه 21 شهریور 1393, 10:28 صبح
تو pyear به اشتباه نقطه بود که باد , باشه

SELECT * FROM `order` WHERE pyear(`order`,`date`) = '1393'

خطا
#1054 - Unknown column 'order' in 'where clause'

mohammad reza beizavi
جمعه 21 شهریور 1393, 11:20 صبح
درود دوباره
پوزش می خوام
باید این function ها رو هم اضافه کنید که پیوست می کنم
هر تغییری توی function های بالا دادید برگردونید به حالت نخست
و پس از اونهم اینکه بین order و date دات (.) هست نه کاما (,):


SELECT * FROM `order` WHERE pyear(`order`.`date`) = '1393'

bagherok
جمعه 21 شهریور 1393, 11:25 صبح
سپاس
جواب داد

bagherok
جمعه 21 شهریور 1393, 11:32 صبح
یه مثال هم از pdate بزنید که به چه صورت هست

mohammad reza beizavi
جمعه 21 شهریور 1393, 11:57 صبح
مثلا شما می خواید مقادیر داخل جدول که با ساختار میلادی هستند رو به صورت خورشیدی واکشی کرده و نمایش بدید. اینطور استفاده کنید:

SELECT name, family, nationalCode, pdate(registerDate) FROM users;

mohammad reza beizavi
جمعه 21 شهریور 1393, 13:19 عصر
البته یه نوشتار کاملتر در این زمینه از این آدرس میتونید بخونید:
تاریخ خورشیدی (شمسی) در MySQL (http://devexir.com/85-databases/mysql/127-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%AE%D9%88%D8%B1%D8%B4%DB%8C%D8%AF%DB%8C-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AF%D8%B1-mysql.html)