PDA

View Full Version : سوال: فیلتر کردن تاریخ تولد



viper2009
یک شنبه 21 آذر 1389, 14:58 عصر
سلام

دستور فیلتر کردن یک فیلدی بنام تاریخ تواد افراد که بصورت 1300/01/01 ذخیره شده است چیست؟
در واقع من از BETWEEN و بزرگتر و کوچکتر استفاده کردم ولی نتیجه درست نمایش داده نمی شود

یعنی اگر بخواهم تاریخ تولد افرادی که در این روز بدست بیاورم ، از اولین رکورد تا آخرین رکورد را نمایش می دهد

قبلاً این تاپیک را در بخش VB.Net نوشتم ولی مدیر بخاطر بی ربط بودن پاکش کرد (چراشو نمی دونم)
که یکی نفر از دوستان گفته بود که بعد از WHERE از SUBSTRING استفاده کنم که متاسفانه این دستور اصلاً فیلتر نمی کنه

Reza_Yarahmadi
یک شنبه 21 آذر 1389, 15:09 عصر
توضيحات شما كامل نيست. نوع داده فيلد تاريخ چيه؟ فقط تاريخ ذخيره ميشه يا ساعت هم ذخيره ميشه؟...؟
اگر بصورت رشته اي و بدون ساعت ذخيره ميكنيد بصورت زير بدون مشكل جواب ميده

Select * From TableName Where DateField Between @Date1 AND @Date2
در ضمن تاريخهاي ارسالي به اين دستور (Date1 , Date2) بايد با همون فرمت ارسال بشه.(4رقم سال ، 2 رقم ماه ، 2 رقم روز)

viper2009
یک شنبه 21 آذر 1389, 15:16 عصر
نوعش varchar(50) و فقط تاریخ ثبت شده

ضمناً با این دستور که نتیجه همون که گفتم میشه که

یعنی من می خوام افرادی که در تاریخ 21 آذر ماه متولد شدن را بست بیاورم ، اما این کد تمام افراد را در تمام سال ها نشان می دهد یعنی از اوله آذرتا آخر اذر را نشون می ده بخاطر اینکه ماهشون 09 است

Rezahak
یک شنبه 21 آذر 1389, 15:35 عصر
فکر می کنم من جواب شما را آنجا داده بودم و تا جایی که یادم است شما می خواستید تمام افرادی که در یک روز و ماه خاص بدون توجه به سال مثلا به دنیا آمده اند را فیلتر کنید . درسته؟
من به شما جواب دادم بنویس:

SELECT * FROM tbl WHERE SUBSTRING(BirthDate,1,5)='01/01'
اگر فرمت ذخیره سازی تاریخ شما به صورت سال/ماه/روز باشد دستور فوق تمام کسانی که در روز 01/01 را بدون توجه به اینکه سال تولدشان چیست برمی گرداند

Reza_Yarahmadi
یک شنبه 21 آذر 1389, 16:02 عصر
دوست عزيز اگر تاريخ رو به صورت 4 رقم سال ،‌2 رقم ماه ، 2 رقم روز ذخيره كنيد و همچنين تاريخ مورد نظرتون رو هم با همين فرمت براي دستور بفرستيد ، دستور دوستمون و يا دستور زير گزارش مورد نظرتون رو بر ميگردونه (بستگي به چينش سال و ماه و روز داره)

Select * From TableName Where Right(BirthDate ,5) = '09/21'

viper2009
یک شنبه 21 آذر 1389, 18:47 عصر
نمی دونم چرا هیچ کدوم فیلتر را در گرید نشون نمی دهند
فکر کنم اشکال از دیتابیس باشه (آخه مال من نیست واسه یک برنامه دیگه بوده من چند تا از فیلدهای مهمش را انتخاب کردم)

Rezahak
یک شنبه 21 آذر 1389, 20:03 عصر
نمی دونم چرا هیچ کدوم فیلتر را در گرید نشون نمی دهند
فکر کنم اشکال از دیتابیس باشه (آخه مال من نیست واسه یک برنامه دیگه بوده من چند تا از فیلدهای مهمش را انتخاب کردم)
منظورتون را از اینکه "فیلتر را در گرید نشون نمی دند" نمی فهمم!!! لطفا واضح تر بفرمایید اگر هم لازم بود table های مورد نیاز را جدا کنید تا ببینیم مشکل چیه

tooraj_azizi_1035
دوشنبه 22 آذر 1389, 15:55 عصر
نوعش varchar(50) و فقط تاریخ ثبت شده
سلام،
چرا برای ذخیره تاریخ که 10 کاراکتر نیاز داره از Char(10) استفاده نکردی؟:متفکر:

Reza_Yarahmadi
دوشنبه 22 آذر 1389, 17:16 عصر
چرا برای ذخیره تاریخ که 10 کاراکتر نیاز داره از Char(10) استفاده نکردی؟:متفکر:
دوست عزیز توی این مسئله و در عمل این 2 (char و varchar) فرقی با هم ندارند. varchar میزان حافظه ای که اشغال میکنه برابر تعداد کاراکتری است که توی اون ریخته میشه که توی این مثال 10 تاست. نوع داده char دقیقا به همون اندازه ای که زمان طراحی تعیین میشه حافظه اشغال میکنه و اگر احیانا تعداد کاراکتر ذخیره شده کمتر باشه بقیه کاراکتر ها رو فاصله میذاره به همین خاطر خیلی از برنامه نویسان (از جمله خودم!!) ترجیح میدن از این نوع استفاده نکنند.

حمیدرضاصادقیان
دوشنبه 22 آذر 1389, 17:22 عصر
دوست عزیز توی این مسئله و در عمل این 2 (char و varchar) فرقی با هم ندارند. varchar میزان حافظه ای که اشغال میکنه برابر تعداد کاراکتری است که توی اون ریخته میشه که توی این مثال 10 تاست. نوع داده char دقیقا به همون اندازه ای که زمان طراحی تعیین میشه حافظه اشغال میکنه و اگر احیانا تعداد کاراکتر ذخیره شده کمتر باشه بقیه کاراکتر ها رو فاصله میذاره به همین خاطر خیلی از برنامه نویسان (از جمله خودم!!) ترجیح میدن از این نوع استفاده نکنند.

البته تفاوت که میکنند باهم. زیرا وقتی اطلاعات در Page ها قرار میگیره فضای بیشتری به دادهای متغیر اختصاص داده میشه و عملا سرعت جستجوی اطلاعات و خواندن و نوشتن در اونها کندتر صورت میگیره.
در این مورد انشالله به تفصیل یک مطلب خواهم نوشت. در حال تهیه اش هستم به محض اماده شدن قرار میدم.

viper2009
سه شنبه 23 آذر 1389, 14:27 عصر
دوستان این مشکل در پنجمین پاسخ که دادم حل شد با استفاده از کد جناب Reza_Yarahmadi (http://barnamenevis.org/member.php?97318-Reza_Yarahmadi) که متاسفانه مدیر این بخش پاسخ من را بخاطر نافنی بودن پاسخ پاک کرد (که می بینم بدتر شده همه باز هم دارن پاسخ ارسال می کنند)