Doğum Günü Bulmak
Doğum Günü Bulmak
S.A.
Doğum tarihlerinin olduğu bir tabloda verilen iki tarih arasında doğum günleri olan kayıtları nasıl alabilirim.
Doğum tarihlerinin olduğu bir tabloda verilen iki tarih arasında doğum günleri olan kayıtları nasıl alabilirim.
Allah herkesin sırtına kaldırabileceği kadar yük koyar
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
S.A.
Teşekkürler hocam ama biraz yanlış anlattım sanırım. Yazmaya çalıştığım sorgu iki tarih arasındaki doğum günlerini bulmak. Yıldan bağımsız olarak sadece gün ve ay üzerinden çalışacak. Extract komutuyla denedim ama pek başarılı olamadım.mussimsek yazdı:select *
from doğum_günlerinin_olduğu_tablo
where doğum_günü between tarih1 and tarih2
Kolay gelsin.
Kod: Tümünü seç
where
extract(Day from kisiler.dogumtarihi) between extract(Day from '01.01.2006') and extract(Day from '30.12.2006')
and
extract(Month from kisiler.DogumTarihi) between extract(Month from '01.01.2006') and extract(Month from '30.12.2006')
Başlık zaten Firebird forumundaöncelikle hangi veritabanı kullandığını yazmalısın
Allah herkesin sırtına kaldırabileceği kadar yük koyar
Zaten çözüme yaklaşmışsın.
Extract kullanmalısın.
Bir kaç örnek çözüm şekli:
İyi çalışmalar.
Extract kullanmalısın.
Bir kaç örnek çözüm şekli:
Kod: Tümünü seç
WHERE
EXTRACT(DAY FROM DOGUMTARIHI) BETWEEN 1 AND 31 AND
EXTRACT(MONTH FROM DOGUMTARIHI) BETWEEN 1 AND 12
WHERE
EXTRACT(DAY FROM DOGUMTARIHI) BETWEEN :parSTARTDAY AND :parFINISHDAY AND
EXTRACT(MONTH FROM DOGUMTARIHI) BETWEEN :parSTARTMONTH AND :parFINISHMONTH
WHERE
EXTRACT(MONTH FROM DOGUMTARIHI) * 1000 + EXTRACT(DAY FROM DOGUMTARIHI) BETWEEN :parSTARTMONTHDAY AND :parFINISHMONTHDAY
S.A.
gibi bir sorguyla 16.02.XXXX ile 16.03.XXXX arasındaki kayıtları bulmak istediğimizde sadece 16.03.1991 tarihini çıkartıyor. Aradaki 01.03.1991 ve 08.03.1991 tarihlerini atlıyor.
Cevap için teşekkürler. Lakin benim sorunumda burda çıkıyor. Mesela aşağıdaki gibi tarihler bulunan bir tablodaZaten çözüme yaklaşmışsın.
Extract kullanmalısın.
Bir kaç örnek çözüm şekli:
TARIH
14.02.1991
15.02.1991
01.03.1991
08.03.1991
16.03.1991
17.04.1991
Kod: Tümünü seç
WHERE
EXTRACT(DAY FROM DOGUMTARIHI) BETWEEN 16 AND 16 AND
EXTRACT(MONTH FROM DOGUMTARIHI) BETWEEN 2 AND 3
Allah herkesin sırtına kaldırabileceği kadar yük koyar
tabloyu create ederken bir field daha ekle ve bu field değerini doğumtarihlerinden alsın. mesela 01.12.1999 tarihini bu fielda 12.01 diye otomatik kayıt edilmesişni sağla sorgunu buna göre al. (bunu triger ile yapabilirsin. yada tabloyu create ederken create table ad ...,soyad ..., doğumtarihi...,extract(month from dogumtarihi)....)
databasenin özelliklerine göre tip dönüşümü yaparak alanları birleştirmelisin.
Kolay gele...
databasenin özelliklerine göre tip dönüşümü yaparak alanları birleştirmelisin.
Kolay gele...
S.A.
Cevap için sağolun. Sanırım sql ile yapmanın bir yolu yok. Önerdiğiniz yolla yapıcam mecburen.bgoktas yazdı:tabloyu create ederken bir field daha ekle ve bu field değerini doğumtarihlerinden alsın. mesela 01.12.1999 tarihini bu fielda 12.01 diye otomatik kayıt edilmesişni sağla sorgunu buna göre al. (bunu triger ile yapabilirsin. yada tabloyu create ederken create table ad ...,soyad ..., doğumtarihi...,extract(month from dogumtarihi)....)
databasenin özelliklerine göre tip dönüşümü yaparak alanları birleştirmelisin.
Kolay gele...
Allah herkesin sırtına kaldırabileceği kadar yük koyar
SQL ile yapmanın yolu tabiki var. @Hakan Can'ın yazdığı son örneği biraz değiştirerek şöyle dener misin?
İyi çalışmalar
Kod: Tümünü seç
where
extract(month from dtarihi) * 1000 + extract(day from dtarihi)
between :parSTARTMONTH*1000 + :parSTARTDAY and :parFINISHMONTH * 1000 + :parFINISHDAY;
S.A.
bgoktas'ın önerisiyle şu şekilde çözdüm.
Eksorgu adiyla varchar(5) bir alan oluşturdum. Before Insert ve Before Update triggerlarına
kodlarını ekledim. Sorgularkende
kullandım.
bgoktas'ın önerisiyle şu şekilde çözdüm.
Eksorgu adiyla varchar(5) bir alan oluşturdum. Before Insert ve Before Update triggerlarına
Kod: Tümünü seç
NEW.eksorgu=extract(day from NEW.dogumtarihi)||'.'||extract(month from NEW.dogumtarihi);
Kod: Tümünü seç
where
cast(Eksorgu||'.'||extract(year from :baslamatarihi) as date) between :baslamatarihi and :bitistarihi
kullandım.
Allah herkesin sırtına kaldırabileceği kadar yük koyar
Merhaba,
Örnek verdiğiniz tarihleri aşağıdaki gibi ibexpertte denedim sizin istediklerinizi veriyordu.
Yanlız bir uyarıda bulunayım. Ben verileri ibexpertte 14.02.1991 şeklinde girmiştim ve bana o şekilde görünüyordu. Substringi ilk yazdığımda from 1 for 5 yapmıştım. Yanlız sorgu çalışmadı. substringin ne verdiğine baktım.
1991-02-14 şeklinde girilmişti. Siz de programınızda önce ne verdiğini istersiniz sorguyu sonra denersiniz.
Kolay gelsin.
Örnek verdiğiniz tarihleri aşağıdaki gibi ibexpertte denedim sizin istediklerinizi veriyordu.
Kod: Tümünü seç
SELECT *
FROM DOG_TARIHI
where SUBSTRING(DOGUM_TAR FROM 6 FOR 5) between '02-16' AND '03-16'
1991-02-14 şeklinde girilmişti. Siz de programınızda önce ne verdiğini istersiniz sorguyu sonra denersiniz.
Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Logo Go özel eğitim, web tasarım, teknik servis