[]
sql sorgu
yan yana duran iki kolon mevcut.
1998-01|1998-04
1998-04|1998-05
1998-05|1998-06
1998-06|1998-09
1998-09|....
bu şekilde takip ediyor. şimdi burada istediğim; ikinci kolondaki ay birinci kolondaki ayı takip ediyorsa ayrı bir sütüna sayı atasın. mesela 04,05,06 birbirini takip ediyor. sol kolondaki 04 satırının sırasına ayrı bir kolonda 3 yazmasını istiyorum. eğer iki aysa takip süresi 2 yazsın. değilse 1 yazsın. nasıl bunun kodu?
1998-01|1998-04
1998-04|1998-05
1998-05|1998-06
1998-06|1998-09
1998-09|....
bu şekilde takip ediyor. şimdi burada istediğim; ikinci kolondaki ay birinci kolondaki ayı takip ediyorsa ayrı bir sütüna sayı atasın. mesela 04,05,06 birbirini takip ediyor. sol kolondaki 04 satırının sırasına ayrı bir kolonda 3 yazmasını istiyorum. eğer iki aysa takip süresi 2 yazsın. değilse 1 yazsın. nasıl bunun kodu?
1-önce yılları kontrol ettir sonra ayları yıllar aynı aylar arasındaki fark 1 ise yeni kolona 1 değilse 0 yazdır 1 ler birbirini takip eden dönemler olmuş olur.
2- yıl-ay şeklindeki veriyi convert ile tarihe çevir datediff ile aradaki farkı bul 1 ise 1 değilse 0 yazdır 1ler birbirini takip eden dönemler olmuş olur.
2- yıl-ay şeklindeki veriyi convert ile tarihe çevir datediff ile aradaki farkı bul 1 ise 1 değilse 0 yazdır 1ler birbirini takip eden dönemler olmuş olur.
- prezarlatif (21.01.18 19:21:25)
hangi sql sunucusunda çalışacağını yazmamışsın. ben mysql varsayıyorum.
2. bir sorguyla negatif değerleri silmek, tek sorguda if ya da case kullanmaktan daha basit olacağı için ben 2 sorguyla yaptım.
tarih tuttuğun kolonların adına tarih1, tarih2 diyelim, farkı tuttuğun yere de fark diyelim.
update tablo
set fark = PERIOD_DIFF(replace(tarih2, "-", ""), replace(tarih1, "-", ""));
bu update sorgusu hepsinin farkını fark kolonuna atayacak. sen takip ediyorsa, yani tarih2 tarih1'den büyükse yazsın demişsin, o yüzden 1'den küçük değerleri null'a ya da 0'a ya da istediğin başka bir şeye kolayca çevirebilirsin.
update tablo set fark = null where fark < 1;
2. bir sorguyla negatif değerleri silmek, tek sorguda if ya da case kullanmaktan daha basit olacağı için ben 2 sorguyla yaptım.
tarih tuttuğun kolonların adına tarih1, tarih2 diyelim, farkı tuttuğun yere de fark diyelim.
update tablo
set fark = PERIOD_DIFF(replace(tarih2, "-", ""), replace(tarih1, "-", ""));
bu update sorgusu hepsinin farkını fark kolonuna atayacak. sen takip ediyorsa, yani tarih2 tarih1'den büyükse yazsın demişsin, o yüzden 1'den küçük değerleri null'a ya da 0'a ya da istediğin başka bir şeye kolayca çevirebilirsin.
update tablo set fark = null where fark < 1;
- gman (21.01.18 19:33:41)
1