Firebird LIKE ile tarih sorgulamasi

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
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Firebird LIKE ile tarih sorgulamasi

Mesaj gönderen ikra »

degerli hocalarim... büyük bir azim ile basladim bu isi ögrenmeye. hatalar ile karsilastikca azmimi yitiriyor gibiyim. iki sey geliyor aklima. herkes programci olmak zorunda degil. zorlama bosuna kendini.... ikincisi ise hata ne kadar cok olursa o kadar fazla ögrenirsin... sizce hangisini dinlemeliyim?

yine karsilastigim sorunlardan biri firebird de sql ile bir arama islemi yapmaya calisiyorum. iki adet sorgulama yapmam gerekiyor. ikisi de tarih ile. birinde gün var digerinde yok. söyle ki gün ay yil olmak üzere üc adet edit im var ve ikinci bölümde ise ay ve yil olmak üzere iki edit im. daha önceleri mysql kullaniyordum, orada yazdigim sekilde yaziyorum ama banamisin demiyor... kod aynen su sekilde:

Kod: Tümünü seç

IBDataSet1.SelectSQL.Add('SELECT * FROM ERECHNUNG WHERE RGVON LIKE ''%-%'+ay.Text+'%-%'+yil.Text+'%'' ORDER BY FAELLIG ASC');
her biri tek tirnak. cift tirnak yok...

burada yalnizca ay'a veri girdigimde ariyor... yil girdigimde ise sonuc vermiyor... tirnaklari falan kaydirdim parametre ile denedim ama bir sonuc alamadim...

degerli fikirlerinizi benimle paylasirsaniz minnettar kalacagim...

selam ve dua ile...
kıdemsiz üye
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Aşağıdaki kodla yılı, ayı, günü tarih alanından ayırabilirsin..

Kod: Tümünü seç

select tarih, extract(YEAR from tarih) as yil, extract(MONTH from tarih) as ay,
  extract(DAY from tarih) as gun from tablo
Bil-cümlesi de burda :wink:
http://firebird.sourceforge.net/index.p ... stenried_1

http://www.interbase-world.com/en/articles/505.php
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam sanirim yanlis anlattim. yada siz anlattiniz ben anlamadim...

like komutu ile yalnizca ay'i veya yil'i yada gün'ü vererek aratmak istiyorum ve bunun icin LIKE kisminda "%" isaretlerini kullandim... yani maksadim gün ay veya yil'i ayirmak degil, kriterlere uygun olanlari listelemek...
kıdemsiz üye
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam gösterdiginiz yöntem den yola cikarak su sekilde yaptim... aslinda like komutu ile cok daha farkli olmaliydi extract komutunu kullanmamak gerekiyordu. biraz uzun oldu ama sonucunda calisiyor... kodlarimi oldukca kisa tutmak istememdeki sebep, programin daha performansli calismasi... kodlari asagida veriyorum... umarim hata yapmamisim dir...

Kod: Tümünü seç

IBDataSet1.SelectSQL.Add('SELECT * FROM ERECHNUNG WHERE Extract(MONTH from TARIH) LIKE ''%'+ay.text+'%'' AND Extract(YEAR from TARIH) LIKE ''%'+yil.text+'%''');
yorumlarinizi bekliyorum...
kıdemsiz üye
Kullanıcı avatarı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

cikis noktan yanlis gibime geliyor. Önce neyi niye yapmak istiyorsun. Like la iki kelimeyi karsilastirabilirsin, tarih rutinleri ise sayilardir. yani 2005 agustostan önce yada sonradir. yapmak istedigin islemde yürüttügüm tahminler yanlis olabilir. Yapmak istedigini biraz daha acarsan. Sadece Agustos aylarini cikarmak istiyorsan Like yine gerek yok.
Annamadim gitti,
miskin
Ve Tanri, bütün kullarini davul edecek :)
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

DB de aylar var... Siz içinde 1 geçenler yada 1 le başlayanlar yada 1 le bitenleri arıyorsunuz diyelim. Like string alanlarda mantıklı iken, üstte verdiğim tür bir durum için mantıksızdır. Elinizde ay gün varsa, once bunu tarihe çevirir, sonra between ile kontrol edersiniz... Örneğin 03/2005 var. Hemen 01/03/2005 ve 31/03/2005 iki tarih üretir, sql içinde

where ..... date between ilktarih and sontarih

şeklinde çalışırsınız. Böylece hem mantığı düzeltmiş olursunuz hem de performansuı dramatik bir biçimde artırmış olursunuz.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Cevapla