none
c# periyodik tarih ayarlama RRS feed

  • Soru

  • Merhabalar MsSql veri tabanımda her aracın periyodik bakım gününü int olarak tutuyorum(her ayın 1i, 2 si 3 ü .. vs ) ve içinde bulunduğumuz ay içinde bunu sorguda tarih olarak gösteriyorum örneğin bakım günü her yın 21 i ise içinde bulunduğumuz ayda 21.10.2016 şeklinde gösteriyorum ve şöyle bir sorunla karşılaştım eğer bakım günü 31 ise 30 çeken aylarda ve şubat ayı malum eksik gün olduğu için yine burada sorun yaşıyorum basit olarak ben şöyle bir yol izlemiştim

    CONVERT(DATE, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), CONVERT(int, bakimgunu))) AS Tarih

    burada bakım günü 31 ise 30 çeken aylarda sıkıntı doğal olarak tarih hatası veriyor bense eğer böyle bir durum söz konusu olursa otomatik olarak ayın son gününü göstermesini nasıl sağlarım. 

    21 Ekim 2016 Cuma 09:11

Yanıtlar

  • Aşağıdaki gibi Sorunu Çözdüm Teşekkürler

    SELECT  Id, arac, bakimgunu, durum, CASE WHEN DATEPART(MONTH,GETDATE()) = 2 AND CONVERT(int, bakimgunu) > 28 
    THEN DATEADD(DD,-(DAY(DATEADD(MM,1,GETDATE()))),DATEADD(MM,1,CONVERT(VARCHAR,GETDATE(),112))) 
    WHEN CONVERT(int, bakimgunu) > 30 THEN DATEADD(DD,-(DAY(DATEADD(MM,1,GETDATE()))),DATEADD(MM,1,CONVERT(VARCHAR,GETDATE(),112))) ELSE CONVERT(DATE, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), CONVERT(int, bakimgunu))) 
                             END AS Tarih

    • Yanıt Olarak İşaretleyen tetee 21 Ekim 2016 Cuma 11:03
    21 Ekim 2016 Cuma 11:02

Tüm Yanıtlar

  • declare @gun int
    if(Month(getdate())=2) set @gun=28
    else if (Charindex(Convert(varchar,Month(getdate())), '35781012'))>0 set @gun=31
    else set @gun=30
    Print @gun

    Sadece 4 yılda bir şubatın 29 çekmesi durumu kontrol edilmiyor.

    Ya da 

    DateAdd(dd,-1,DATEFROMPARTS(year(getdate()), Month(getdate())+1,1))

    Direk son gün tarihini verir yalnız ayı daha önce kontrol etmek gerekiyor. (12. ay için)


    http://pgnchess.com
    http://dergikapaklari.com




    21 Ekim 2016 Cuma 10:19
  • Aşağıdaki gibi Sorunu Çözdüm Teşekkürler

    SELECT  Id, arac, bakimgunu, durum, CASE WHEN DATEPART(MONTH,GETDATE()) = 2 AND CONVERT(int, bakimgunu) > 28 
    THEN DATEADD(DD,-(DAY(DATEADD(MM,1,GETDATE()))),DATEADD(MM,1,CONVERT(VARCHAR,GETDATE(),112))) 
    WHEN CONVERT(int, bakimgunu) > 30 THEN DATEADD(DD,-(DAY(DATEADD(MM,1,GETDATE()))),DATEADD(MM,1,CONVERT(VARCHAR,GETDATE(),112))) ELSE CONVERT(DATE, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), CONVERT(int, bakimgunu))) 
                             END AS Tarih

    • Yanıt Olarak İşaretleyen tetee 21 Ekim 2016 Cuma 11:03
    21 Ekim 2016 Cuma 11:02