PDA

View Full Version : اررور در هنگام select زدن



haamidd
پنج شنبه 07 خرداد 1394, 14:41 عصر
131738

من هنگامی که میخوام از دیتابیس Select بزنم همچین ارروری میده و خیلی گشتم تو اینترنت ولی نتونستم درستش کنم

نوع داده فیلد ForDate هم از نوع date هست




ممنون

behzadkhan
پنج شنبه 07 خرداد 1394, 17:01 عصر
با سلام

دوست عزیز

یه سوال:
اگر شما تاریخ تاریخ 1394/02/30 را به 1394/02/28 تغییر بدهید آیا باز هم خطا می دهد.

اگر خطا نداد که فکر می کنم بدانم علت خطا چه چیزی هست.

با تشکر

haamidd
پنج شنبه 07 خرداد 1394, 18:51 عصر
بله دقیقا همینطوره و وقتی بجای 30 میزارم 28 خیلی قشنگ و بدون هیچ ارروری اجرا میشه.

لطفا راهنمایی بفرمایید، انشالله همیشه موفق و سربلند باشد : )

behzadkhan
پنج شنبه 07 خرداد 1394, 19:23 عصر
با سلام


دوست عزیز


من همین مشکل را در پایگاه داده های اکسس داشتم.


و


در آخر متوجه شدم که درسته که ما تاریخ را هجری شمسی وارد می کنیم ولی فرمت ذخیره تاریخ میلادی هست.
یعنی وقتی می گیم که 1394/02/30 یعنی سی امین روز فوریه سال هزار و سیصدور نود و چهار میلادی


بله هیچ مشکلی هم پیش نمی آید و برنامه به خوبی کار می کند.


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


بنابراین


ما نمی توانیم 29 و 30 و 31 را وارد کنیم.


من برای حل این مشکل البته در اکسس فرمت اون فیلد را از حالت تاریخ به حالت رشته یا همون استرینگ در آوردم و با کمی تغییر برنامه ام بدون مشکل کار می کند.


================================================== =========================


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


================================================== =========================


امیدوارم مشکلتان حل شده باشد.


با تشکر

haamidd
جمعه 08 خرداد 1394, 05:02 صبح
خیلی ممنون، اتفاقا من از اول این فیلد رو بصورت رشته در نظر گرفته بودم ولی در اون حال با این مشکل داشتم که نمیتونستم در یک بازه زمانی select بزنم! که مثلا بگم select * from post where publishDate between 'َA' and 'A'

شما در این مورد چه نظری دارید بزرگوار؟
که وقتی من این تاریخ رو بصورت varchar ذخیره کردم... چطوری باید بین تو تاریخ select بزنم؟!







ممنون و دل آرام باشید



چیزی که من الان به نظرم میاد و خوبه اینه که خب من تاریخ هارو بصورت میلادی ذخیره کنم و مقایسه کنم و فقط موقع نمایش اون، اون رو تبدیل کنم و به کابر نشون بدم
حالا اگه شما روش بهتری به خاطرتون میرسه بفرمایید

behzadkhan
جمعه 08 خرداد 1394, 11:11 صبح
خیلی ممنون، اتفاقا من از اول این فیلد رو بصورت رشته در نظر گرفته بودم ولی در اون حال با این مشکل داشتم که نمیتونستم در یک بازه زمانی select بزنم! که مثلا بگم select * from post where publishDate between 'َA' and 'A'


شما در این مورد چه نظری دارید بزرگوار؟
که وقتی من این تاریخ رو بصورت varchar ذخیره کردم... چطوری باید بین تو تاریخ select بزنم؟!














ممنون و دل آرام باشید






چیزی که من الان به نظرم میاد و خوبه اینه که خب من تاریخ هارو بصورت میلادی ذخیره کنم و مقایسه کنم و فقط موقع نمایش اون، اون رو تبدیل کنم و به کابر نشون بدم
حالا اگه شما روش بهتری به خاطرتون میرسه بفرمایید


با سلام


دوست عزیز


فکر می کنم باید بجای استفاده از between باید از بزرگتر/کوچکتر استفاده شود:
FroData >= '1394/02/01' AND ForData<='1394/02/30'


================================================== ===================


همچنین برای روش دوم که گفتید تاریخ را میلادی ذخیره کنم و موقع نمایش به هجری شمسی تبدیل کنم.


اگر برای برنامه تان از زبان های دات نتی مثل سی شارپ یا ویژوال بیسیک استفاده می کنید پیشنهاد می کنم از System.Globalization.PersianCalendar استفاده کنید.


بعد از اینکه تاریخ مورد نظرتان را از پایگاه داده ها استخراج کردید و در یک متغیر از نوع DataTime ذخیره کردید آنرا با استفاده از PersianCalender به تاریخ هجری شمسی تبدیل کنید و نمایش دهید.


برای آشنایی با نحوه تبدیل تاریخ میلادی به هجری شمسی لینک زیر را بررسی نمایید:


https://msdn.microsoft.com/en-us/library/system.globalization.persiancalendar(v=vs.110).asp x

================================================== ===================

با تشکر