PDA

View Full Version : جستجو بین دو تاریخ فقط درsql serverکمک فوری



Amir80
دوشنبه 21 فروردین 1385, 01:24 صبح
باسلام.قبل از طرح مساله از دوستان خواهش می کنم از طرح جمله"قبلا مطرح شده" پرهیز کنند
دوستان گرامی من کدی از sqlاحتیاج دارم که دو تاریخ را از دو text boxبگیره و مقادیر بین دوتاریخ را در یک جدول از sql server(فقطsql server)بعد نتیجه را در یک datagridنمایش بده.لازم به ذکره که من کدهای مختلفی رو مانند کد زیر امتحان کردم وجواب نداده.
RS.Open "select * from employees where tdate between #" & CDate(txtfrom.Text) & "# and #" & CDate(txtTo.Text) & "#", CN

مسعود زمانپور
سه شنبه 22 فروردین 1385, 09:11 صبح
اگه بحث محاسبه اختلاف تاریخ در بانک SQL است حتما باید فیلدتان از نوع تاریخ باشد در اینصورت تابع مطرح شده در SQL که خودتان اشاره فرمودید جواب می دهد ولی چون فیلدهای تاریخ با تاریخ شمسی مشکل دارد من پیشنهاد سه فیلد عددی مجزا (روز-ماه-سال) را برای این کار می کنم که با نوشتن یک تابع ساده می توان تفاوت تاریخ را محاسبه نمود

hamid2002ir
سه شنبه 22 فروردین 1385, 12:26 عصر
به نظر من تاریخ رو یک فیلد عددی انتخاب کن و تاریخ مثلا 12/12/84 را به صورت 841212 وارد کن و برای جستجو و کوری گرفتن به این ترتیب عمل کن Between 841212 and 841229
اینجوری دیگه مثلا تو تاریخ 31/2/85 هیچ مشکی ندارید چون تاریخ 31/2 میلادی وجود نداره

hadi2345
سه شنبه 22 فروردین 1385, 16:06 عصر
با سلام .

برای جستجو بین دو تاریخ شما میتونید تاریخ رو به صورت String ذخیره کنید و هنگام جستجو هم با استفاده از Replace و Cast ، جستجوی خودتونو انجام بدید .

Select * From YourTable Where CAST(REPLACE(DateField , ' / ' , '' ) AS NUMERIC ) BETWEEN
" & StartDate & " AND " & EndDate & "

در این کد نام فیلد تاریخ شما ، DateField میباشد و دو متغیر StartDate و EndDate ، تاریخ شروع و پایان میباشد که توسط کاربر وارد می شود و نوع این متغیرها هم Integer است .
و قبل از جستجو ابتدا باید دو تاریخ ورودی کاربر رو به عدد تبدیل کنید . مثلا 01/01/85 به 850101 تبدیل می شود . البته من از این روش تو دات نت استفاده میکنم و نباید برای VB.6 مشکلی داشته باشه .

موفق باشید .

yavari
سه شنبه 22 فروردین 1385, 16:28 عصر
سلام

حمید جان
اگه تاریخ تو بانک sql اینجوری ذخیره بشه پیشنهادتون برا مشاهده اون به فرمت تاریخ چیه ؟؟؟
فرض کنید که قراره اطلاعات تو دیتا گرید ریخته بشن

ممنون

hamid2002ir
چهارشنبه 23 فروردین 1385, 08:35 صبح
سلام
دو روش می توان استفاده کرد
1- هنگام کوری گرفتن مثلا بجای انتخاب Select Date From Table بنویس
Select Format(Date,'##/##/##') as Fdate from Table
در این روش فیلد Date به Fdate تغییر می کنه که Fdate هر چی بخوای می شه بذاری
2- تو گرید فرمت فیلد تاریخ را به صورت ##/##/## انتخاب کن

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

در ضمن سرعت عمل این روش به نظر من بیشتر از روشهای دیگر است چون فقط بین دو عدد جستجو می شه و هیچ تبدیل نداره و تو تاریخ های خاص مشکل نداره اگر خواستی یک برنامه (مثال) برات بنویسم

yavari
چهارشنبه 23 فروردین 1385, 09:34 صبح
سلام

حمید جان
خیلی خیلی از راهنماییتون ممنونم:تشویق: :تشویق: :تشویق:

من شخصا روش شما رو می پسندم و همیشه روش پیشنهادیم همین بوده !
اما حالا گیر افتادم
میدونم که این سوالو نباید اینجا بپرسم اما اگه بلدی همین جا جواب بده
ببینید این کار فقط تو vb جواب میده
من برا asp.net هر دو روش شما رو تست کردم جواب نگرفتم
عین عبارت فرمت میاد تو خروجی !!!
اگه بلدی ، ممنون میشم راهنماییم کنید:تشویق:

بازم ممنون

hamid2002ir
چهارشنبه 23 فروردین 1385, 12:04 عصر
من با asp.net کار نکردم ولی با asp مشکلی نداشتم
فکر می کنم فرمت را باید بعد از کوری که می گیری در داخل برنامه از فرمت استفاده کنی
مثلاً
a = format(Datefiled,"##/##/##") d

yavari
چهارشنبه 23 فروردین 1385, 18:49 عصر
سلام

نه ، میخوام تو گرید بریزم
ولی خب ، ممنون