PDA

View Full Version : مشکل در مقایسه دو تاریخ شمسی در پایگاه



akram_k
پنج شنبه 30 آذر 1391, 10:32 صبح
سلام من تاریخ های مورد نیازم رو به شکل اعداد فارسی مثل : ۱۳۹۱/٠۹/۱۱ ذخیره کردم و نوع فیلد رو nvarchar تعریف کردم حالا میخوام بتونم یک سری رکورد ها رو با مقایسه تاریخشون بازیابی کنم اما دستوری مثل :

" select * from product where date_insert between '۱۳۹۱/۰۹/۱۰' and ۱۳۹۱/٠۹/۱۱"
هیچ خروجی نمیده آیا میشه از همون عبارت like اینجا هم واسه تاریخ ها استفاده کرد و اگر مشه چجوری ؟

moharam1370
پنج شنبه 30 آذر 1391, 10:50 صبح
سلام
مشکلی نداره


SELECT radif_f,serial,money_p,date_out,count_p FROM Tbl_Foroosh
'where date_out between '1391/09/06' and '1391/09/11

Arash_janusV3
پنج شنبه 30 آذر 1391, 10:58 صبح
سلام من تاریخ های مورد نیازم رو به شکل اعداد فارسی مثل : ۱۳۹۱/٠۹/۱۱ ذخیره کردم و نوع فیلد رو nvarchar تعریف کردم حالا میخوام بتونم یک سری رکورد ها رو با مقایسه تاریخشون بازیابی کنم اما دستوری مثل :

" select * from product where date_insert between '۱۳۹۱/۰۹/۱۰' and ۱۳۹۱/٠۹/۱۱"
هیچ خروجی نمیده آیا میشه از همون عبارت like اینجا هم واسه تاریخ ها استفاده کرد و اگر مشه چجوری ؟

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

select date from product where date like '1391/%'

Arash_janusV3
پنج شنبه 30 آذر 1391, 11:00 صبح
سلام من تاریخ های مورد نیازم رو به شکل اعداد فارسی مثل : ۱۳۹۱/٠۹/۱۱ ذخیره کردم و نوع فیلد رو nvarchar تعریف کردم حالا میخوام بتونم یک سری رکورد ها رو با مقایسه تاریخشون بازیابی کنم اما دستوری مثل :

" select * from product where date_insert between '۱۳۹۱/۰۹/۱۰' and ۱۳۹۱/٠۹/۱۱"
هیچ خروجی نمیده آیا میشه از همون عبارت like اینجا هم واسه تاریخ ها استفاده کرد و اگر مشه چجوری ؟

به احتمال زیاد به خاطر اینه که در جدول اعداد تاریخ به صورت لاتین هستند ولی شما با اعداد فارسی دارید سرچ می کنید

akram_k
پنج شنبه 30 آذر 1391, 11:06 صبح
به احتمال زیاد به خاطر اینه که در جدول اعداد تاریخ به صورت لاتین هستند ولی شما با اعداد فارسی دارید سرچ می کنید
نه اتفاقا من تو بانکم هم اعداد رو فارسی وارد کردم کهخ واسه نشون دادنشون توی فرم ها و گزارشات و ... به شکل فارسی دردسر کمتری داشته باشم. میخوام بدونم دستور like رو میشه توی مقایسه تاریخ ها با استفاده از عبارت between آورد ؟ و یا اگه جایی بخوام میتونم با علامت های <= یا >= از like هم استفاده کنم ؟
اگه میشه چجوری ؟
ممنون

akram_k
پنج شنبه 30 آذر 1391, 11:09 صبح
سلام
مشکلی نداره

1
2
3
SELECT radif_f,serial,money_p,date_out,count_p FROM Tbl_Foroosh
'where date_out between '1391/09/06' and '1391/09/11


فکر میکنم به خاطر اینکه اعداد شما بصورت لاتین ذخیره شدند کد شما مشکلی نداشته باشه اما تاریخ های من به همین شکل فارسی ذخیره شدند و همینطور که عرض کردم نوع اون رو هم nvarchar گرفتم.

Arash_janusV3
پنج شنبه 30 آذر 1391, 11:09 صبح
می شه منظورتون را از مقایسه بگید چیه؟
چه کاری می خواهید انجام بدید؟
ابتدا باید یک سرچ ساده انجام بدید تا صحت داده های تاریخ در جدول مطمئن بشید

Arash_janusV3
پنج شنبه 30 آذر 1391, 11:12 صبح
یکی از رکوردها را به صورت دستی با اعداد لاتین اصلاح کنید و در سرچ هم تست کنید ببینید
اشکال از همین می تونه باشه

moharam1370
پنج شنبه 30 آذر 1391, 11:22 صبح
فکر میکنم به خاطر اینکه اعداد شما بصورت لاتین ذخیره شدند کد شما مشکلی نداشته باشه اما تاریخ های من به همین شکل فارسی ذخیره شدند و همینطور که عرض کردم نوع اون رو هم nvarchar گرفتم.

یعنی شما اعداد رو فارسی ذخیره کردید !

tara1367
پنج شنبه 30 آذر 1391, 11:24 صبح
منم خودم همچين مشكلي در برنامم داشتم مجبور شدم زماني كه تاريخ در پايگاه داده ذخيره ميشه را بصورت مثلا 13910930 ذخيره كنم بعد موقع نمايش به وسيله يك تابه اسلش ها رو بهش اضافه كنم اينجوري ديگه راحت ميتونيد هر نوع مقايسه انجام بدين.

Arash_janusV3
پنج شنبه 30 آذر 1391, 11:26 صبح
منم خودم همچين مشكلي در برنامم داشتم مجبور شدم زماني كه تاريخ در پايگاه داده ذخيره ميشه را بصورت مثلا 13910930 ذخيره كنم بعد موقع نمايش به وسيله يك تابه اسلش ها رو بهش اضافه كنم اينجوري ديگه راحت ميتونيد هر نوع مقايسه انجام بدين.

این روشتون اشتباهه
از همون ابتدا به راحتی به صورت 1391/01/01 می بایست ذخیره می کردید

akram_k
پنج شنبه 30 آذر 1391, 11:31 صبح
می شه منظورتون را از مقایسه بگید چیه؟
چه کاری می خواهید انجام بدید؟
ابتدا باید یک سرچ ساده انجام بدید تا صحت داده های تاریخ در جدول مطمئن بشید
فرض کنید میخوام اطلاعات محصولاتی را که بین یک تاریخ خاص وارد انبار شده اند چاپ بگیرم بنابراین از ورودی 2 تا تاریخ شروع و پایان دوره رو میگیرم و تمام رکورد های بین اون دوت تاریخ رو بازیابی میکنم .

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

moharam1370
پنج شنبه 30 آذر 1391, 11:52 صبح
فرض کنید میخوام اطلاعات محصولاتی را که بین یک تاریخ خاص وارد انبار شده اند چاپ بگیرم بنابراین از ورودی 2 تا تاریخ شروع و پایان دوره رو میگیرم و تمام رکورد های بین اون دوت تاریخ رو بازیابی میکنم .

بله اگه اعداد بصورت لاتین باشه مشکلی نداره اما من میخوام به همین صورت فارسی ذخیره بشه . در واقع اینطوری سوالمو بپرسم : مقایسه تاریخ ها در دیتابیس وقتی اعداد بصورت کاراکتر های فارسی ذخیره بشن چجوریه ؟
شما دستورتو با یه کاراکتر N بزرگ بنویس ، ببینید جواب میده

'Where Date_Out between N'1391/09/11' and N'1391/09/17

Arash_janusV3
پنج شنبه 30 آذر 1391, 12:08 عصر
یک روش با همون between و دیگری هم

select * from product where date >= '1391/01/01' and date <= '1391/02/05'

akram_k
پنج شنبه 30 آذر 1391, 12:08 عصر
شما دستورتو با یه کاراکتر N بزرگ بنویس ، ببینید جواب میده
ممنون جواب داد