none
IF ile time kontrol RRS feed

  • Soru

  • Merhabalar
    store procedure de parametre olarak gelen saat ile tablodaki bir kayıttan alığım saati karşılaştırıyorum şartım şu:
    (('07:30AM'(parametre)!<'05:30AM'(tablodaki kayıt)) AND  ('07:30AM'(parametre)<'09:30AM'(tablodaki kayıt))) sabah yada akşam 5.30 ile 9.30 arasında bir saat verirsem şartım TRUE dönüyor ancak ben sadece sabah 05.30 ile 09.30 saatleri arasında true olmasını istiyorum buna nasıl engel olabilirim acaba ? 

    NOT: parametreyi yada tablo kaydını Convert ediyorum time(0),datetime ve nvarchar denedim hepsinde aynı problem ile karşılaşıyorum.

    8 Mart 2013 Cuma 12:35

Yanıtlar

  • DateTime işlemlerinizde hiçbir zaman string kullanmayın, karşılaştırma, sıralama, hesaplama vs. yapamazsınız. Tarihi sadece kullanıcıya göstereceğiniz yerde stringe convert edin.

    Saat sorgularınızda Time tipini kullanabilirsiniz;

    select * from Tablo where convert(time, TarihAlanı) between '05:30' and '09:30'


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    10 Mart 2013 Pazar 15:45
  • Merhaba,

    Kod ve veri yapılarını sorunuzla birlikte vermenizi tavsiye ederim. Bu detayları vermediğiniz durumda sorunuzu okuyanlar açık olmayan kısımları hayal güçleriyle doldurmak durumunda kalırlar.

    time tipinde bir parametre ya aynen ya da 24 saatlik formatta char tipine dönüştürülerek karşılaştırmada kullanılabilir.

    DECLARE
     @t char(12);
    
    SELECT @t = CONVERT(char(12),GETDATE(),114)
    SELECT @t

    Örnek sonuç : 18:07:02:020

    gibi..

    8 Mart 2013 Cuma 16:09

Tüm Yanıtlar

  • Merhaba,

    Kod ve veri yapılarını sorunuzla birlikte vermenizi tavsiye ederim. Bu detayları vermediğiniz durumda sorunuzu okuyanlar açık olmayan kısımları hayal güçleriyle doldurmak durumunda kalırlar.

    time tipinde bir parametre ya aynen ya da 24 saatlik formatta char tipine dönüştürülerek karşılaştırmada kullanılabilir.

    DECLARE
     @t char(12);
    
    SELECT @t = CONVERT(char(12),GETDATE(),114)
    SELECT @t

    Örnek sonuç : 18:07:02:020

    gibi..

    8 Mart 2013 Cuma 16:09
  • Cevabınız için teşekkür ederim kod bloğum çok uzun olduğu için paylaşmaktan kaçındım ancak nedendir diye uğraşırken şunu fark ettim parametre olarak veri tipi DATETIME olan değişken kullandığınız da ve değer olarak '2013-05-02 01:00:00.000' böyle bir tarih verdiğiniz de tarih  'May  2 2013  1:00AM' böyle oluyor ki buda IF karşılaştırmalarında soruna yol açabiliyor.
    Benim sorunuma gelince ben parametreden aldığım tarihin saat kısmını kullanabilmek için tarihi VARCHAR(23) e convert ediyordum daha sonra SUBSTRING ile saat kısmını alıyordum oda AM/PM şeklinde oluyordu ve IF karar yapısında akşam saatleri ve sabah saatleri karışıyordu parametreyi sadece TIME(0) a convert ettim ve sorun düzeldi.


    9 Mart 2013 Cumartesi 14:00
  • DateTime işlemlerinizde hiçbir zaman string kullanmayın, karşılaştırma, sıralama, hesaplama vs. yapamazsınız. Tarihi sadece kullanıcıya göstereceğiniz yerde stringe convert edin.

    Saat sorgularınızda Time tipini kullanabilirsiniz;

    select * from Tablo where convert(time, TarihAlanı) between '05:30' and '09:30'


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    10 Mart 2013 Pazar 15:45
  • Fark ettim ancak biraz geç oldu. 
    Tekrar Teşekkürler.
    11 Mart 2013 Pazartesi 09:15