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

نام تاپیک: مشكل در استفاده و مقايسه ساعت (Time)

  1. #1
    کاربر تازه وارد آواتار s_savabi
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    مشهد
    پست
    63

    Question مشكل در استفاده و مقايسه ساعت (Time)

    سلام
    توي يك پروسيجر، ساعت فعلي رو ميگيرم و ميخام مقايسه اش كنم كه بين چند تا بازه زماني كه تعريف كردم هست يانه؟

    Declare @Start_T datetime
    Declare @End_T datetime
    Declare @Current_Time datetime
    Set @Start_T = 07:00PM
    Set @end_T = 03:00AM
    Set @Current_Time = Select Right(GetDate(),7)

    if @Current_Time Between @Start_t and @End_t
    Print ' OK '

    ولي اين كار رو نميتونم پياده سازي كنم يعني خطا نميده ولي كار هم نميكنه!!!
    لطفا راهنمايي كنيد

  2. #2

    نقل قول: مشكل در استفاده و مقايسه ساعت (Time)

    دوست من،
    این قطعه کدی که قرار دادین مشکلات فراوانی دارد که هر کدام را مورد بررسی قرار خواهم داد.
    1. زمانی که چند متغیر را می خواهین تعریف کنید نیازی نیست که هر کدام را به طور جداگانه با دستور DECLARE تعریف کنید. کافیه یک DECLARE بنویسید و با کاراکتر کاما هر تعداد متغیری که می خواهین را تعریف کنید.
    یعنی اون قسمت کد شما که مربوط به این موضوع هست به این شکل در خواهد آمد:

    Declare @Start_T datetime,
    @End_T datetime,
    @Current_Time datetime;


    2. بایستی مقدار ساعتی را که به متغیر های شروع و پایان انتساب می دهین را داخل یک جفت تک کوتیشن قرار بدین یعنی :

    Set @Start_T = '01:00 AM'
    Set @end_T = '03:00 PM'

    3. Select باید از این عبارت حذف شود:
    Set @Current_Time = Select Right(GetDate(),7)


    4. این را می دانید که AM قبل از ظهر و PM برای بعد از ظهر در نظر گرفته میشود. ولی در این مورد من علاقه دارم که از
    24-hour clock
    استفاده کنم.
    بوسیله ی تابع CONVERT و استایلی که برای آن می توان تعریف کرد مساله حل می شود.
    (اگر واقعا می خواهید متوجه بشید که مشکل اساسی کدتان به چی مربوط است کافیه مقادیر دو متغیر زمان شروع و زمان پایان را print کنید)

    در نهایت کد مطلوب شما به این شکل در خواهد آمد:
    هم اکنون که دارم این پست را میزنم ساعت در حدود 3:06 دقیقه PM است. پس OK باید چاپ شود.

    Declare @Start_T datetime,
    @End_T datetime,
    @Current_Time datetime;

    Set @Start_T = '09:00 AM'
    Set @end_T = '04:00 PM'

    Set @Current_Time = GetDate()


    if convert(varchar(50), @Current_Time, 114)
    Between convert(varchar(50), @Start_T, 114)
    and convert(varchar(50), @end_T, 114)
    Print ' OK '


    وبلاگ من (Advanced SQL Querying)

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

    نقل قول: مشكل در استفاده و مقايسه ساعت (Time)


    Declare @Start_T datetime,
    @End_T datetime,
    @Current_Time datetime;

    Set @Start_T = '07:00 PM'
    Set @end_T = '04:00 AM'

    Set @Current_Time = '10:30 PM'


    if convert(varchar(50), @Current_Time, 114)
    Between convert(varchar(50), @Start_T, 114)
    and convert(varchar(50), @end_T, 114)
    Print ' OK '


    سلام دوست عزيز
    واقعا از راهنماييتون ممنونم
    خيلي كمك كرد. فقط يه مشكل كوچولوي ديگه ميمونه
    اگه ساعت هاي شروع و پايانم به شكل بالا باشه يعني ساعت شروع بزرگتر از پايان باشه چي؟
    اونوقت چكارش كنم؟
    اگه اين رو هم راهنمايي كنيد واقعا ممنونتون ميشم..

  4. #4

    نقل قول: مشكل در استفاده و مقايسه ساعت (Time)

    وقتی از عملگر Between استفاده می کنید بایستی حتما مقدار شروع کوچکتر از مقدار پایان باشه.

    وقتی می گین ساعت مثلا بین 11 شب تا 1 صبح باشه. میتونید ابتدا چک کنید که ساعت بین 11 شب تا 12 شب هست یا اینکه ساعت بین 00:00 تا 1 صبح هست یا نه. اگر یکی از این شرط ها درست بود یعنی اینکه ساعت مورد نظر بینی 11 شب تا 1 صبح بوده.

    اینم کدش:

    Declare @Start_T datetime,
    @End_T datetime,
    @Current_Time datetime;

    Set @Start_T = '07:00 PM'
    Set @end_T = '04:00 AM'

    Set @Current_Time = '10:30 PM'

    if convert(varchar(50), @Start_T, 114)
    > convert(varchar(50), @end_T, 114)

    if convert(varchar(50), @Current_Time, 114)
    Between convert(varchar(50), @Start_T, 114)
    and convert(varchar(50), cast('11:59:59 PM' as datetime),114)
    Or convert(varchar(50), @Current_Time, 114)
    Between convert(varchar(50), cast('00:00:01 AM' as datetime),114)
    and convert(varchar(50), @End_T, 114)

    Print ' OK '
    وبلاگ من (Advanced SQL Querying)

  5. #5
    کاربر تازه وارد آواتار s_savabi
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    مشهد
    پست
    63

    نقل قول: مشكل در استفاده و مقايسه ساعت (Time)

    خيلي خيلي ممنونم دوست عزيز
    موفق و پيروز باشيد

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

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