Database - Veritabanı
İki Zaman Arasinda Calisma Saatlerini Hesaplama Sql Veya Excel
İki Zaman Arasinda Calisma Saatlerini Hesaplama Sql Veya Excel
-
Selam arkdaslar
baslikta yazdigim gibi iki zaman arasinda ( gun + saat ) calisma saatlerini hesaplayabilicek bi funksiyon lazim haftasonlari disidna ve sadece saat 8 den 5 kadar, bunu nasil yapabilicegim hakkinda fikri olan varmi ?
-
PHP + MySql olarak şöyle bir algoritma aklıma geldi.
Bir işe başlanıyor diyelim..
Bu işin başlangıç zamanını Unix Time olarak veritabanına girersin.
Bu işin bitiş zamanını da Unix Time olarak veritabanına girersin.
Başlangıç ile bitiş arasındaki farkı kolaylıkla hesaplayabilirsin.
-
SQL olarak şöyle bir yol izle diyebilirim ancak ama kod olarak pek fazla yardım edemem baştan söyliyim :(
öncelikle adamın başlangıç ve bitiş tarihi olucak
mesela başlangıç= 29/07/2013
Bitiş = 16/6/2014
toplan gün olarak böyle bulabilirsin
bir ay = 30 gün Başlangıç Ayı = 07
kckAy = 12-7;
burdan 5 gelir bunuda 30 ile çarp =150 birde 29unda başlamış onuda 30dan çikart =1
150+1 = 151 gün 2013 senesini bitirmek için çalışmış.
sonra birde 2014 te çalışmış belli bir süre.
onuda hiç çıkatma yapmadan (ay*3)+gün olarak bul
196 gün gelir ordanda
151+196= 347 gün yapıyor
bir hafta = 7 gün ve 2 günü tatil.
347/7= 49 gibi bişey yapar. Yani 49 hafta var
bunuda 2 ile çarp ki çalışmadığı hafta sonu günlerini bul.
98 olur buda.Yani adam 347 günde 98 gün çalışmamış.
347-98 = 249 gün çalışmış (sanki bir yerde yanlışlık yaptım :)
Neyse bir günde 8 saat çalışıyormuş bunuda 249 * 8 = 1992 yapıyor sanırım.
şimdi biraz işlerim var 4-5 saat sonra sql sorgusu için yardımcı olurum sana :D ama mantık bu.
Eğer SQLim kuvvetli yaparım diyorsan sen yap bende yardımcı olucam sana :)
-
sql icin prosedür olusturman gerekecektir ki her yıl bazı tatil günleri degistigi icin, olusturulacak olan prosedürde takvime göre bunları belirtmen gerekir. haftasonlarını da aynı sekilde aradan cıkarmak icin pl/sql'de case yapısı kullanılabilir, sql'de birebir aynı mı bilmiyorum.
sıfırdan ugrasamam ama yazmaya calısırsan, biz de yardımcı olmaya calısırız.
-
GodKlaus bunu yazdı
SQL olarak şöyle bir yol izle diyebilirim ancak ama kod olarak pek fazla yardım edemem baştan söyliyim :(
öncelikle adamın başlangıç ve bitiş tarihi olucak
mesela başlangıç= 29/07/2013
Bitiş = 16/6/2014
Benim önerdiğim yol, saat - dakika - saniye cinsinden sonuç verir... :)
-
SerYolcu bunu yazdıGodKlaus bunu yazdı
SQL olarak şöyle bir yol izle diyebilirim ancak ama kod olarak pek fazla yardım edemem baştan söyliyim :(
öncelikle adamın başlangıç ve bitiş tarihi olucak
mesela başlangıç= 29/07/2013
Bitiş = 16/6/2014
Benim önerdiğim yol, saat - dakika - saniye cinsinden sonuç verir... :)
hocam sagol ama heralde soruyu okumamissin, senin onerdigin yol hic bir ise yaramiyor benim bahsetigim sadece calisma gunleri ve calisma saatlerini hesaplamak, bide veritabanina unix time girmene gerek yok, senin bahsetigin seyi su sekilde haledersin TIMESTAMPDIFF(SECOND, '2013-06-29 13:13:55', '2013-06-16 15:20:18'), yani konu anladigin kadar basit degil.
geniuss tarafından 27/Haz/14 11:54 tarihinde düzenlenmiştir -
Andrei bunu yazdı
sql icin prosedür olusturman gerekecektir ki her yıl bazı tatil günleri degistigi icin, olusturulacak olan prosedürde takvime göre bunları belirtmen gerekir. haftasonlarını da aynı sekilde aradan cıkarmak icin pl/sql'de case yapısı kullanılabilir, sql'de birebir aynı mı bilmiyorum.
sıfırdan ugrasamam ama yazmaya calısırsan, biz de yardımcı olmaya calısırız.
hocam cevabin icin cok sagol, tatil gunleri onemli degil sadece hafta sonlarini hesaplamasin ve sadece calisma saatlerini alsa yeter
yazmaya basliyim takildigim bir yer falan varsa yardimci olursaniz cok sevinirim
geniuss tarafından 27/Haz/14 11:58 tarihinde düzenlenmiştir -
GodKlaus bunu yazdı
SQL olarak şöyle bir yol izle diyebilirim ancak ama kod olarak pek fazla yardım edemem baştan söyliyim :(
öncelikle adamın başlangıç ve bitiş tarihi olucak
mesela başlangıç= 29/07/2013
Bitiş = 16/6/2014
toplan gün olarak böyle bulabilirsin
bir ay = 30 gün Başlangıç Ayı = 07
kckAy = 12-7;
burdan 5 gelir bunuda 30 ile çarp =150 birde 29unda başlamış onuda 30dan çikart =1
150+1 = 151 gün 2013 senesini bitirmek için çalışmış.
sonra birde 2014 te çalışmış belli bir süre.
onuda hiç çıkatma yapmadan (ay*3)+gün olarak bul
196 gün gelir ordanda
151+196= 347 gün yapıyor
bir hafta = 7 gün ve 2 günü tatil.
347/7= 49 gibi bişey yapar. Yani 49 hafta var
bunuda 2 ile çarp ki çalışmadığı hafta sonu günlerini bul.
98 olur buda.Yani adam 347 günde 98 gün çalışmamış.
347-98 = 249 gün çalışmış (sanki bir yerde yanlışlık yaptım :)
Neyse bir günde 8 saat çalışıyormuş bunuda 249 * 8 = 1992 yapıyor sanırım.
şimdi biraz işlerim var 4-5 saat sonra sql sorgusu için yardımcı olurum sana :D ama mantık bu.
Eğer SQLim kuvvetli yaparım diyorsan sen yap bende yardımcı olucam sana :)
hocam cevabin icin cok sagol su cozumu bi analize ediyim eger aksam vaktin varsa sql icin de yardimci olabilirsen cok sevinirim
-
şuan boşum :)
2 sene okulda sql dersi aldım.yani bilgilerim kısıtlı ama çözüm olarak mantığını daha basit halde tekrar çözümleyebilirim :)
ama kodlama kısmında basit yerlerde yardım edebilirim ancak :(
-