نمایش نتایج 1 تا 13 از 13

نام تاپیک: جستجو در پایگاه داده بر اساس تاریخ

  1. #1

    جستجو در پایگاه داده بر اساس تاریخ

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

  2. #2

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    select * from mytable where date beetwen date 1 and date2

  3. #3
    کاربر دائمی آواتار gholami146
    تاریخ عضویت
    آبان 1388
    محل زندگی
    مشهد مقدس
    پست
    374

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    از دستورات اسکیوال استفاده کنید

    Select * From tblKala Where (Dateout >= date And Dateout <=Date)

  4. #4
    کاربر دائمی آواتار gholami146
    تاریخ عضویت
    آبان 1388
    محل زندگی
    مشهد مقدس
    پست
    374

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    البته روش بهتر روش دوست خوبم هست که با استفاده از پارامتر beetwenمی باشد ولی در عمل هر دو دستور یکی هست

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه-هرسین
    پست
    40

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    اصلا به تعداد انسانها میتونی کد بزنی که کار کنه

    select * from (select *from table where date > date1) where data < date2


    جوابای دوستای عزیزم هم کاملا درسته
    ولی این سرعتش بیشتره
    چرا که از بین جدولی کوچیکتر سرچ میزنه
    and که کلا خیلی کار رو کند میکنه

  6. #6
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    نقل قول نوشته شده توسط samad1987 مشاهده تاپیک
    اصلا به تعداد انسانها میتونی کد بزنی که کار کنه

    select * from (select *from table where date > date1) where data < date2


    جوابای دوستای عزیزم هم کاملا درسته
    ولی این سرعتش بیشتره
    چرا که از بین جدولی کوچیکتر سرچ میزنه
    and که کلا خیلی کار رو کند میکنه
    سلام.
    این حرف در این مثال اشتباه هست.
    ما زمانی این کار رو انجام میدیم که بخوایم از روی یه نتیجه برگشتی دوباره جواب بگیریم. در اینصورت ابتدا اون جواب برگشتی اولیه رو ریز میکنیم (همون select داخلی) و بعدش از روی اون جواب کوچیک شده، دنبال نتیجه دلخواه میگردیم. ولی در این مثال شما یک select رو تبدیل به دو select کردی که کار بهینه ای نیست.
    برای اینکه در عمل نتیجه کار رو ببینید یه جدول با چند هزار رکورد رو در نظر بگیرید. با کد زیر زمان اجرای کوئری ها رو می سنجیم :
    کد شما :
    DECLARE @start_time DATETIME

    SET @start_time = GETDATE()

    -- my query
    select * from (select * from Table_1 where '1391/10/01' > date1)a1 where '1391/04/01' < date2

    -- calculate runtime query
    SELECT RTRIM(CAST(DATEDIFF(MS, @start_time, GETDATE()) AS CHAR(10))) AS 'RunTime'


    کد دوستانی که در پست های 1 و 2 جواب دادن :
    DECLARE @start_time DATETIME

    SET @start_time = GETDATE()

    -- my query
    --select * from Table_1 where '1391/10/01' > date1 and '1391/04/01' < date2

    -- calculate runtime query
    SELECT RTRIM(CAST(DATEDIFF(MS, @start_time, GETDATE()) AS CHAR(10))) AS 'RunTime'

    موفق باشید.

  7. #7

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    تشکر از پاسختون
    مطابق با گفته شما من این کد را به صورت زیر نوشتم
    string str1 = "SELECT * from Anbar inner join Object on Anbar.ObjectCode=Object.ObjectCode WHERE state='خروج ازانبار' and Anbar.date>=@date1 and Anbar.date<=@date2";

    SqlCommand cmd = new SqlCommand(str1, Con);

    // cmd.Parameters.AddWithValue("@a", ObjCode1.Text);

    cmd.Parameters.AddWithValue("@date1", Sdate.Text);
    cmd.Parameters.AddWithValue("@date2", Edate.Text);

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = cmd;
    Con.Open();
    da.Fill(ds, "Anbar");
    Con.Close();
    dataGridView1.DataBindings.Add(new Binding("datasource", ds, "Anbar"));


    ولی تمام تاریخ ها در این بازه رو نشون نمی ده!! بعضی ها را جا می ندازه، چی کار باید بکنم؟

  8. #8
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    شما وقتی join میزنید (منظور همون inner join هست)، فقط رکوردهای مشترک بین دو جدول (objectcode یکسان ) با هم ادغام میشن. و بعد شرط شما بر روی این کوئری اعمال میشه. شما فقط دارید به بازه زمانی نگاه میکنید و فکر میکنید که خروجی صحیح نیست. در صورتیکه این join هست که اول داده ها رو فیلتر میکنه.
    برای رفع این مشکل و با توجه به کوئری که نوشتید میتونید از Left Join استفاده کنید. در کوئری که شما نوشتید، جدول انبار شما که تاریخ رو از اون میخونید در سمت چپ قرار داره (جدول Object در سمت راست قرار داره). کار Left Join اینه که تمام رکوردهای جدول سمت چپ رو برمیگردونه حتی اگر نظیرش در جدول سمت راست نباشه. یعنی اگر ObjectCode ای در جدول Anbar باشه ولی همون ObjectCode در جدول Object نباشه، باز هم همه رکوردهای جدول Anbar (که شامل تاریخ هست) رو میاره و به جای فیلدهای جدول Object مقدار Null رو برمیگردونه.حالا زمانیکه شرط تاریخ بر این نتیجه برگشتی اعمال میشه، جواب مورد نظرتون رو مشاهده خواهید کرد.
    مطلب بسیار ساده است، کافیه یه بار تست کنید تا متوجه این چند خط توضیحات بشید.
    فقط به جای کلمه Join بنویسید Left Join .
    موفق باشید.

  9. #9

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    يه چيز ديگه هم هس
    اين تاريخ تو ديتابيس به صورت رشته هس يا datetime
    اگه رشته باشه بايد حتما به صورت hh/mm/ss باشه يعني مثل اين 1392/04/09
    اگه به صورت 1392/4/9 باشه جواب كلا اشتباه ميده

  10. #10

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    نقل قول نوشته شده توسط hamid_hr مشاهده تاپیک
    يه چيز ديگه هم هس
    اين تاريخ تو ديتابيس به صورت رشته هس يا datetime
    اگه رشته باشه بايد حتما به صورت hh/mm/ss باشه يعني مثل اين 1392/04/09
    اگه به صورت 1392/4/9 باشه جواب كلا اشتباه ميده
    تاریخ به صورت رشته است، تاریخ رو از رو سیستم می خواند و به صورت 1392/4/9 ذخیره می کند، چرا اشتباه هست؟
    چی کار باید بکنم؟

  11. #11
    کاربر دائمی آواتار amir200h
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    بروجرد->تهران->قم
    سن
    33
    پست
    782

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    به آدرس زیر یه سر بزن
    https://barnamenevis.org/showthread.p...12#post1807612

  12. #12
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    نقل قول نوشته شده توسط rashidi_sm مشاهده تاپیک
    تاریخ به صورت رشته است، تاریخ رو از رو سیستم می خواند و به صورت 1392/4/9 ذخیره می کند، چرا اشتباه هست؟
    چی کار باید بکنم؟
    همونطور که دوستمون هم گفتن تاریخ رو نباید به این صورت ذخیره کنید. و باید همه تاریخ ها به یک شکل واحد ذخیره بشن. یعنی باید طول تمام تاریخ ها رو 10 کاراکتری وارد کنید.
    دلیل این کار به این خاطر هست که مقایسه رشته ها، بصورت کاراکتر به کاراکتر هست. یعنی رشته '4' از رشته '11' بزرگتر هست. در صورتیکه شما قصد این رو دارید که به sql بفهمونید که ماه 11 بزرگتر از ماه 4 هست. ولی چون 4 رشته ای ( '4') از 11 رشته ای ( '11' ) بزرگتر هست این اتفاق در جستجوها رخ نمیده و نتیجه مد نظر بدست نمیاد. ولی اگر '4' رو بصورت '04' ذخیره کنید در اینصورت '11' از '04' بزرگتر خواهد بود. (اولین کاراکتر 11 برابر با 1 هست که با اولین کاراکتر 04 که 0 هست مقایسه میشه و 11 به عنوان رشته بزرگتر شناخته میشه). پس همه تاریخ ها رو بصورت 10 کاراکتری مثلا 1392/04/09 ذخیره کنید.
    برای اینکه تاریخ سیستم رو بصورت 10 کاراکتری ذخیره کنید میتونید از کد زیر استفاده کنید :
      DateTime today = DateTime.Today;

    PersianCalendar pc = new PersianCalendar();

    string date = pc.GetYear(today).ToString("0000") + pc.GetMonth(today).ToString("/00") + pc.GetDayOfMonth(today).ToString("/00");

    MessageBox.Show(date);

    با این توضیح من فکر میکنم دیگه نیازی به Left Join نیست. چون من اینطور تصور کرده بودم که شما همه تاریخ ها رو 10 کاراکتری ثبت کردید.
    موفق باشید.

  13. #13

    نقل قول: جستجو در پایگاه داده بر اساس تاریخ

    یه مثال با linq میزنید ؟

تاپیک های مشابه

  1. سوال: جستجو در پایگاه داده
    نوشته شده توسط zahra68 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 3
    آخرین پست: پنج شنبه 07 شهریور 1387, 11:22 صبح
  2. سوال: کد مربوط به جستجو در پایگاه داده در ASP.NET با پشتیبانی C#‎
    نوشته شده توسط sadaf_m در بخش ASP.NET Web Forms
    پاسخ: 9
    آخرین پست: شنبه 01 تیر 1387, 09:44 صبح
  3. جستجو در پایگاه داده Access
    نوشته شده توسط iranpour در بخش C#‎‎
    پاسخ: 5
    آخرین پست: دوشنبه 27 اسفند 1386, 11:08 صبح
  4. جستجو در پایگاه داده
    نوشته شده توسط phpadmin در بخش PHP
    پاسخ: 1
    آخرین پست: دوشنبه 05 شهریور 1386, 10:25 صبح
  5. جستجو در پایگاه داده
    نوشته شده توسط ameysams در بخش VB.NET
    پاسخ: 2
    آخرین پست: دوشنبه 20 آذر 1385, 14:01 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •