Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4
Cevap
596
Tıklama
0
Öne Çıkarma
Oracle da boş olan saat aralıklarını getirmek
A
12 yıl
Onbaşı
Konu Sahibi

Arkadaşlar merhaba, yapmam gereken bir poliklinik randevu ekranı var.



benden istenen, randevu tablosunda bulunan randevu tarihlerini, 08:00 ve 17:00 saatleri arasından çıkararak

tüm boş zamanları dakika cinsinden getirmek ve hangi saatler arasında randevu verilebileceğini görüntülemek.



(örnek vermem gerekirse saat 9.30 da 10 dk lık bir randevum olsun diğer randevum da saat 10.45 te yine 10 dk lık olsun

bana bu sorgunun saat 08.00 ile 9.30 arasındaki başlangıç, bitiş zamanı ve arada kalan dakikasını,

09.40 ile 10.45 arasındaki başlangıç, bitiş zamanı ve arada kalan dakikasını,

ve 10.55 ten 17.00 a kadar olan süreyi vermesi gerekiyor.)



kolonlar

randevuBaslangicTarihi , randevuBitisTarihi

11.03.2013 09:30:00 , 11.03.2013 09:40:00

11.03.2013 10:45:00 , 11.03.2013 10:55:00



istediğim dönüş tipi:

aralik , dakika

08:00:00 - 09:30:00 , 90

09:40:00 - 10:45:00 , 65

10:55:00 - 17:00:00 , 365





select (t.bitis - t.baslangic) * 1440 as aralik from KOD_RANDEVU_SAAT_PROFIL_DETAY t

where t.baslangic between to_date('11.03.2011 08:00:00', 'dd-mm-yyyy hh24:mi:ss')

and TO_DATE('11.03.2011 17:00:00', 'dd-mm-yyyy hh24:mi:ss') order by t.baslangic asc



bu sorgu bana var olan kayıtların tarih farkını getiriyor ama istediğim bu değil dışında kalan aralıklar.

not exists ile çözmeye çalıştım ama ya olmuyor yada ben beceremedim.



bana bir çözüm yolu üretirseniz çok sevinirim.

şimdiden yardımlarınız için çok teşekkür ederim.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi alix12 -- 16 Aralık 2013; 14:22:08 >

F
12 yıl
Yarbay

Bunu cursor ile kolayca halledersin.Randevunu bulduktan sonra otede ve geride olanlara bakıp aradaki farkı ve zamanı alabilirsin.Bu trarz bir calısmam vardı kodlarını aşagıda MSSQL için ama oracle benzer olmalı

DECLARE @ID int
DECLARE @Adr nchar(100)
DECLARE @Ys int

DECLARE Sec CURSOR SCROLL FOR
SELECT ID,Adres,Yaş FROM Kisi



OPEN Sec

FETCH NEXT FROM Sec INTO @ID,@Adr,@Ys

WHILE (@@FETCH_STATUS=0)
BEGIN
BEGIN TRY
IF(@Adr LIKE '%555%')
BEGIN
PRINT @Adr
UPDATE Kisi
SET Yaş=0
WHERE ID=@ID

FETCH PRIOR FROM Sec INTO @ID,@Adr,@Ys
UPDATE Kisi
SET Yaş=0
WHERE ID=@ID

FETCH RELATIVE 2 FROM Sec INTO @ID,@Adr,@Ys
UPDATE Kisi
SET Yaş=0
WHERE ID=@ID


END
FETCH NEXT FROM Sec INTO @ID,@Adr,@Ys
END TRY
BEGIN CATCH
PRINT 'İŞLEM SONU'
END CATCH
END
< Resime gitmek için tıklayın >


Bu mesaja 1 cevap geldi.
A
12 yıl
Onbaşı
Konu Sahibi

hocam yardımın için teşekkür ederim. nette cursor u araştırdım ama istediğimi yapamadım.
başka bir yolu yok mu bunun ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @fsh77
F
12 yıl
Yarbay

cursor ile yaparsın bunu, mantığın şu olucak,randevuyu görünce bir ilerisinde ve bir gerisindeli randevuya bakıcaksın benimdekinde update var sen sadece degerlerleri alıcan hepsini gecici bir tabloya insert edip ordan bilgileri cekersin yapamıyorum dersen ufak bir ücret karsılıgı yapıp veririm sana.


Bu mesaja 1 cevap geldi.
A
12 yıl
Onbaşı
Konu Sahibi

yok hocam sağol önerin için ama kendim yapmaya çalışırım.
yardımın için teşekkürler



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.