SQL'de Hesaplanan olusturma ve o alana göre WHERE yapma ?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
eyakar
Üye
Mesajlar: 6
Kayıt: 13 Nis 2005 08:19

SQL'de Hesaplanan olusturma ve o alana göre WHERE yapma ?

Mesaj gönderen eyakar »

Öncelikle bu form'u olusturan ve bilgilerini paylaşma zihniyetine sahip tüm insanlara çok teşekkür ederim.
Yaklaşık 3 ay önce Delphiye gectim bilgi kaynağı olarak Bu Form ve MARCO CANTU bana yetti kendisine de buradan teşekkürlerimi iletirim.

Soru sormadan önce iyice araştırma yapılması fikrine saygı duymaktayım. 3 ayda sonunda ilk defa soru sorma ihtiyacı sanırım bunu doğrular. :)

Firebird 1.5 / Delphi 7 / Windows Server 2003 platformlarında uygulama gelistirmekteyim. Kitlendigim nokta ise ;

bir tablo icerisinde 1 adet DATE özelligine sahip STARIH adında field bulunmakta. Sorum ( cozemedigim ve arayıpta bulamadığım )
bir SQL ile bugün'ün ( now() durumu ) tarihi ile STARIH arasındaki gun hesabını yaptırmak (isin bu kısmı tamam hellettim) ve bulunan gun'e Where yada between uygulayabilmek bunu çözemedim.

Yardımlarınız icin simdiden teşekkür ederim.
Saygılarımla...
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Hallettim dediğin sorguyu kullanarak bir view oluşturup sonra bu viewi bir tablo gibi kullanarak ikinci sorguyu çalıştırabilirsin.

Ya da

Select * from (hesaplatan sql) where .....

şeklinde alt sorgularıda kullabilirisin.....
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Aradığın böyle birşeyse eğer:
viewtopic.php?t=7340

burada bulabilirsin. Bu Firebird Stored Procedure 2 timestamp değeri arasında kaç dakika olduğunu geri döndürür. Bu değeri 24x60 a böldüğünde kaç gün olduğunu hesaplatabilirsin.

Eğer 2 tarih arasını listeletmek istiyorsan:

Kod: Tümünü seç

SELECT * FROM HEDE WHERE ATARIH BETWEEN IlkTarih AND SonTarih
şeklinde 2 tarih arasında kalan veriyi çekebilirsin.
Kullanıcı avatarı
eyakar
Üye
Mesajlar: 6
Kayıt: 13 Nis 2005 08:19

Sorumu ve sorunumu örneklendireyim

Mesaj gönderen eyakar »

örnek tablo olarak EMPLOYEE tablosunu kullandım. ( hemen hemen tum IB ve Firebird kullanıcılarında var.)

öncelikle
Employee tablosunun HIRE_DATE field'ının Type'ını DATE olarak degistirdim. sonra SQL kodu yazdım

Kod: Tümünü seç

SELECT EMP_NO, FIRST_NAME, HIRE_DATE,
(cast ('NOW' AS DATE) - HIRE_DATE) GUNSAY FROM EMPLOYEE
ORDER BY HIRE_DATE
sonuc olarak veri geliyor. (test alanı olarak IB EXPERT'in SQL Builder'ı kullandım)
yapmak istedigim GUNSAY'a krater vermek WHERE (GUNSAY>5500) gibi ekleme yapmak yada benzeri bir olay. Ne yaptıysam olmuyor.
bir SP yada view kullanmadan olabilmeli diye düşünüyorum.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Firebird bunu maalesef kabul etmez. Ancak şu şekilde iç içe sorgu ile yapılabilir.

Kod: Tümünü seç

SELECT EMP_NO, FIRST_NAME, HIRE_DATE from EMPLOYEE
  WHERE (select cast ('NOW' AS DATE) - HIRE_DATE) FROM EMPLOYEE) > 5500
ORDER BY HIRE_DATE
Kullanıcı avatarı
eyakar
Üye
Mesajlar: 6
Kayıt: 13 Nis 2005 08:19

Mesaj gönderen eyakar »

İlgi ve Alakana teşekkür ederim.
malesef olmuyor.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Olmayacağını biliyorum. Denemedim çünkü. Ancak benzer bir mantık ile hatasını düzeltip kullanabilirsin.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Kod: Tümünü seç

SELECT EMP_NO, FIRST_NAME,HIRE_DATE, current_date- HIRE_DATE from EMPLOYEE
where (current_date- HIRE_DATE)>5000
ORDER BY HIRE_DATE
firebird 1.5 da oluyor.
yalnız employee.gdb interbase ile olusturulmus ve dialect 1
dolayısıyla date tipini tanımıyor.
tum veri tabanının ddl i ve dataları ile birlikte dialect 3 e aktarmaya calıstım olması adamlar year isminde bir alan kullanmıslar, sonucta aktaramadım
sadece sorguyu yazdıgınız employe tablosunu aktardım ve alan tipini DATE olarak degistirdim, ama kriterde (current_date- HIRE_DATE)>5000 kullanınca
sacma bir hata veriyordu.
bende
update employee e set
e.hire_date=cast(e.hire_date as date)
seklinde bir update yaptım ve su an bu sekliyle calısıyopr
sizde deneyebilirsiniz
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
eyakar
Üye
Mesajlar: 6
Kayıt: 13 Nis 2005 08:19

Teşekkür Ederim

Mesaj gönderen eyakar »

İlginize çok teşekkür ederim.
Dediklerinizi aynen yaptım ve tıkır tıkır çalıştı.

Tekrar teşekkür eder, iyi günler dilerim.
Cevapla