PDA

View Full Version : یک اشکال در تاریخ



roya2002_80
چهارشنبه 08 اسفند 1386, 10:50 صبح
سلام
من تاریخ که در دیتابیس ذخیره شده به صورت مثلا 1386/12/12
من می خوام یک کوئری روی دیتابیس بزنم اینجوری که داده های بین دو تاریخ مشخص را برگرداند مثلا بین 1386/11/12 تا 1386/12/12 چه گونه باید بنویسم؟
ممنونم

rezaiy.ali
چهارشنبه 08 اسفند 1386, 10:56 صبح
با سلام
اولا سعی کن که تاریخ را در بانک به صورت 13861208 ذخیره کنی مهم نیست از چه نوعی باشه
بعد با عملگرد ها => و =< می تونی رکورد ها مد نظر را به خروجی ببری

sinpin
چهارشنبه 08 اسفند 1386, 11:04 صبح
سلام
من تاریخ که در دیتابیس ذخیره شده به صورت مثلا 1386/12/12
من می خوام یک کوئری روی دیتابیس بزنم اینجوری که داده های بین دو تاریخ مشخص را برگرداند مثلا بین 1386/11/12 تا 1386/12/12 چه گونه باید بنویسم؟
ممنونم
روش پست قبلی جواب میده اما کلا برای انجام عملیات روی تاریخ شمسی بهتره ابتدا تاریخ ها رو به میلادی برگردونید و عملیات مورد نظر رو با توابع درونکار روی میلادی انجام بدید.

beh_develop
چهارشنبه 08 اسفند 1386, 12:19 عصر
می تونین در داخل Query به جای استفاده از عمگر =< یا => از کلمه Between استفاده کنین :



Select * From [TableName] Where
[DateFieldName] Between '1386/11/20' And '1386/12/25'

Mahdi.Kiani
چهارشنبه 08 اسفند 1386, 12:49 عصر
سلام
من تاریخ که در دیتابیس ذخیره شده به صورت مثلا 1386/12/12
من می خوام یک کوئری روی دیتابیس بزنم اینجوری که داده های بین دو تاریخ مشخص را برگرداند مثلا بین 1386/11/12 تا 1386/12/12 چه گونه باید بنویسم؟
ممنونم

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

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

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

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

beh_develop
چهارشنبه 08 اسفند 1386, 14:52 عصر
انشالا یه روز شاهد فیلد تاریخ از اون نوعی که همتون عاشقش هستین در سی کوئل سرور پیدا میشه


دوست گرامی r.kiani :

در SQL 2005 یک امکان جدید وجود داره که شما با اون می تونید هر نوع داده ای که می خواین بنویسین و در دیتابیس مورد نظر پیاده سازی کنین ، برای مثال خودم یه کلاس PersianDateTime نوشتم که یک سری توابع ، خصوصیات متنوعی داشت، از جمله تبدیل تاریخ شمسی به میلادی ، من این کلاس رو دیتابیس پیاده سازی کردم و....

جالب ترین قسمتش اینجاست : فرض کنین تو یه جدولی یک فیلدی از نوع PersianDateTime تعریف کردیم... مثلا PDate



Select PDate.ToString(),PDate.AddDays(10).ToString As Date2,
PDate.Year From [MyTable]


PDate.ToString خود تاریخ رو نشون می ده ، AddDays(10).ToString تاریخ ده روز بعد رو نشون می ده و PDate.Year چهار رقم سال تاریخ رو برای هر رکورد نشون میده

متود های ToString و AddDaye و همچنین خصوصیت Year رو پیاده سازی کرده بودم که براحتی در داخل Query می شه ازش استفاده کرد.


در ضمن ... به جز تعریف نوع جدید می شه مثلا Aggregate Function نوشت، می تونین برا خودتون به جای تابع Avg تابع MyAvg رو بنویسین که وقتی عدد صفر بود اونو توی معدل حساب نکنه یا موارد دیگه...


سعی می کنم به این زودی یه نمونه پروژه از مواردی که گفتم رو تو همین سایت بزارم

Mahdi.Kiani
چهارشنبه 08 اسفند 1386, 15:39 عصر
دوست گرامی r.kiani :

در SQL 2005 یک امکان جدید وجود داره که شما با اون می تونید هر نوع داده ای که می خواین بنویسین و در دیتابیس مورد نظر پیاده سازی کنین ، برای مثال خودم یه کلاس PersianDateTime نوشتم که یک سری توابع ، خصوصیات متنوعی داشت، از جمله تبدیل تاریخ شمسی به میلادی ، من این کلاس رو دیتابیس پیاده سازی کردم و....

جالب ترین قسمتش اینجاست : فرض کنین تو یه جدولی یک فیلدی از نوع PersianDateTime تعریف کردیم... مثلا PDate



Select PDate.ToString(),PDate.AddDays(10).ToString As Date2,
PDate.Year From [MyTable]


PDate.ToString خود تاریخ رو نشون می ده ، AddDays(10).ToString تاریخ ده روز بعد رو نشون می ده و PDate.Year چهار رقم سال تاریخ رو برای هر رکورد نشون میده

متود های ToString و AddDaye و همچنین خصوصیت Year رو پیاده سازی کرده بودم که براحتی در داخل Query می شه ازش استفاده کرد.


در ضمن ... به جز تعریف نوع جدید می شه مثلا Aggregate Function نوشت، می تونین برا خودتون به جای تابع Avg تابع MyAvg رو بنویسین که وقتی عدد صفر بود اونو توی معدل حساب نکنه یا موارد دیگه...


سعی می کنم به این زودی یه نمونه پروژه از مواردی که گفتم رو تو همین سایت بزارم

منظور من بودن یک تایپ مخصوص به این موضوع یا چیزی شبیه به اون بود که با دات نت مستقیما مچ بشه و همه اون کار هایی را که با DateTime درون Sql میشه انجام داد با اون هم بشه..
مثل persiancalender که در دات نت موجوده ولی Datetimepicker نیست...
البته نمونه های نوشته شده ولی خوب .....

اگر قرار به نوشتن کلاس باشه که عملیات مورد نظر را انجام بده باز همون ایده ای که همیشه وجود داشته و در چند پست اول هم اشاره شد، وجود خواهد داشت.
البته مسلما وجود چنین امکاناتی روی sql و بردن پردازش ها روی اون خیلی می تونه کمک کنه ولی .....

به هر حال ممنون از توضیحاتی که دادین