En iyi yanıtlayıcılar
c# periyodik tarih ayarlama

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.
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
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
- Düzenleyen Halil TAŞ 21 Ekim 2016 Cuma 10:32
-
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