none
Date Time RRS feed

  • Soru

  •  
       SELECT 
        
    TRT_KANTAR,SUM(TRT_NET_TRTM) netTartim, SUM(TRT_FIRE) fire
    , SUM(TRT_FIRE_MIKTAR) fireMiktar, SUM(TRT_DGS) seker1, SUM(TRT_DGS_SEKER) seker2
    ,isnull((select  SUM(TRT_NET_TRTM) from FC_TARTIM_14
    where TRT_KANTAR=m1.TRT_KANTAR
    and convert(date,TRT_SON_TRH)= convert(date, getdate())
    ),0)  gunlukTartim
    ,(select SUM(TRT_NET_TRTM) from FC_TARTIM_14 
    where TRT_KANTAR=m1.TRT_KANTAR ) genelTartim
    ,isnull((select sum(CARI_TAHH) from FC_CARI_14 where CARI_KANTAR=m1.TRT_KANTAR ),0) cariTah
    FROM FC_TARTIM_14 m1 where TRT_SON_TRH between CONVERT(datetime,'08-10-2014 07:00',103) and CONVERT(datetime,'08-10-2014 19:00',103)

    group by TRT_KANTAR  
    order by  TRT_KANTAR

    Merhaba arkadaşlar. Yukarıdaki sorguda son satırında datetime kısmında sorgu çalışıyor fakat tarihi elle girdim.Bunu otomatik olarak yani o gün ve o saatler arasındaki sorgular gelsin istiyorum. Yardımcı olurmusunuz?

           
    11 Ekim 2014 Cumartesi 19:32

Yanıtlar

  • FROM FC_TARTIM_14 m1
    where 
    datepart(hh,TRT_SON_TRH) between 7 and 18

    işinizi görür sanırım

    alternatif:

    FROM FC_TARTIM_14 m1
    where 
    convert(varchar(12),convert(time,TRT_SON_TRH)) BETWEEN '07:00:00.000' and '19:00:00.000'


    12 Ekim 2014 Pazar 08:24

Tüm Yanıtlar

  • FROM FC_TARTIM_14 m1
    where 
    datepart(hh,TRT_SON_TRH) between 7 and 18

    işinizi görür sanırım

    alternatif:

    FROM FC_TARTIM_14 m1
    where 
    convert(varchar(12),convert(time,TRT_SON_TRH)) BETWEEN '07:00:00.000' and '19:00:00.000'


    12 Ekim 2014 Pazar 08:24
  • Peki bu kodu nereye yazmam gerekiyor.
    12 Ekim 2014 Pazar 08:55
  • Bu şekilde sorguyu çalıştırdığımda manuel olarak elle girilir.Ben rapor alırken o gün ve sabah 7 ertesi gün sabah 7 ye kadar olan raporu çekeceğim.
    19 Ekim 2014 Pazar 12:07
  • SQL Server tarihsaat araliklarini BETWEEN kullanarak alamazsiniz, cunku bitis saatini tam olarak belirtebilecek bir sey yok SQL serverda ve tarihsaat hassasiyeti 3 ms. BETWEEN,  tarih >= @baslangic ve tarih <=  @bitis seklindedir, yani @baslangic ve @bitis "dahil" anlamindadir ki, o zaman @bitis degerini bildirmenin yolu yok. Size lazim olan tarih >= @baslangic ve  tarih < @bitis, burada @bitis "istenmeyen" en kucuk tarih saat.

    Bunun icin parametre kullanin. Ornek:

    declare @baslangic datetime, @bitis datetime;
    
    set @baslangic = '2014/10/8 07:00';
    set @bitis = '2014/10/8 19:00';
    
    select ... 
    where TRT_SON_TRH >= @baslangic and TRT_SON_TRH < @bitis;

     Bu sekilde kullanmasaydiniz bile convert ile cevirim gereksiz, o cevirim otomatik yapiliyor zaten (dogru formatta verirseniz - ODBC canonical format, yyyy/MM/dd HH:mm:ss)

    Buyuk ihtimalle bu sorgu size SSMS'de degil, bir dilde yazdiginiz programda gerekecek, o zaman isiniz daha da kolay, dogrudan kullandiginiz dilde DateTime parametre gondereceksiniz. Ornegin C# ile soyle bir sey:

    DataTable tbl = new DataTable();
    using( SqlConnection con = new SqlConnection(@"server=..."))
    {
       SqlCommand cmd = new SqlCommand(@"select ... 
    where TRT_SON_TRH >= @baslangic and 
          TRT_SON_TRH < @bitis;",   con);
       
    
       cmd.Parameters.AddWithValue("@baslangic", new DateTime(2014, 10, 8, 7, 0, 0));
       cmd.Parameters.AddWithValue("@bitis", new DateTime(2014, 10, 8, 19, 0, 0));   
       
       con.Open();
       tbl.Load( cmd.ExecuteReader() );
       con.Close();
    }

    Tabii Linq kullanilinca daha da basit olurdu. Burada kullanilan aralikta 7:00 dahil, 19:00 haric (19:00'a kadar).

    19 Ekim 2014 Pazar 15:29