extract(month)

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
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

extract(month)

Mesaj gönderen Vital »

Merhaba
D7 fb 2.1

arkadaslar asagidaki kodla o tarihte sevkedilen toplam miktari aya gore buluyorum .

Kod: Tümünü seç


IBQuery2.Close;
   IBQuery2.SQL.Clear;

IBQuery2.SQL.Add( 'select sum(sevkdetail.sevkadeti) as top_sevki,extract(day month sevkdetail.sevktarihi)as sevk_ayi from sevkdetail ');


IBQuery2.SQL.Add( 'where sevktarihi>='''+datetostr(DateTimePicker1.date)+''' AND sevkdetail.sevktarihi<='''+datetostr(DateTimePicker2.date)+'''  ');

IBQuery2.SQL.add('GROUP BY  extract(month from sevkdetail.sevktarihi)' );

  

IBQuery2.open;
fakat haftalık bazda almak istedigim de yani month yerine week yazdigimda hata veriyor.haftalık bazda nasil toplamini aldirabilirim.ve heryılın 1-52 arası var ben su sekilde yapmasini istiyorum 2008 in 11 inci haftasi su kadar 2009 un 11 inci haftasi su kadar toplam diye.ve arkadaslar aylari 1 2 3 diye aliyor ocak subat mart seklinde aldirabilirmiyiz?

tskler.
Garibanus
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: extract(month)

Mesaj gönderen emin_as »

Stored Procedurelerle zamanında basit bir aylık rapor yapmıştım, kendi projene göre uyarlamayı dene, takılırsan yine yardımcı olmaya çalışırım.

Verilen rakama göre ay adını getiriyor.

Kod: Tümünü seç

CREATE PROCEDURE AYGETIR(
  AY SMALLINT)
RETURNS(
  AYADI CHAR(9) CHARACTER SET NONE)
AS
BEGIN
  if ((ay < 1) and (ay > 12)) then ayadi='GECERSIZ';
  else
    if (ay=1) then ayadi='OCAK';
    else
     if (ay=2) then ayadi='ŞUBAT';
    else
     if (ay=3) then ayadi='MART';
    else
     if (ay=4) then ayadi='NİSAN';
    else
     if (ay=5) then ayadi='MAYIS';
    else
     if (ay=6) then ayadi='HAZİRAN';
    else
     if (ay=7) then ayadi='TEMMUZ';
    else
     if (ay=8) then ayadi='AĞUSTOS';
    else
     if (ay=9) then ayadi='EYLÜL';
    else
     if (ay=10) then ayadi='EKİM';
    else
     if (ay=11) then ayadi='KASIM';
    else
     if (ay=12) then ayadi='ARALIK';
  SUSPEND;
END
;
Aylık hareketleri getiriyor, ay ismi için aygetir procedurenu kullanıyor.
Benim tablomda sayfada ay rakamı tutuluyordu. Eger ay için ayrı bir alanın yoksa, tarihten alabilirsin.

select extract (month from tarih), sum .. veya select extract(week from tarih), sum ....
group by 1
şeklinde kullanabilirsin.

Kod: Tümünü seç

CREATE PROCEDURE AYLIKDEFTER
RETURNS(
  AY CHAR(9) CHARACTER SET NONE,
  SAYI INTEGER,
  MIKTAR NUMERIC(18, 2),
  TUTAR NUMERIC(18, 2))
AS
DECLARE VARIABLE AY1 SMALLINT;
BEGIN
  FOR
    select sayfa,count(*),sum(miktar),sum(tutar) from defhar7
      group by sayfa
      into :ay1,:sayi, :miktar, :tutar
    DO
      begin
        select ayadi from aygetir(:ay1)
        into :ay ;
        SUSPEND;
      end
END
;
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: extract(month)

Mesaj gönderen Vital »

hocam tskler
fakat benim sorunum

Kod: Tümünü seç

extract(week month sevkdetail.sevktarihi)as sevk_ayi from sevkdetail 


satirinda week olayinda hata vermesi

SQL error code=-104
token unknown - line 1,column 200
WEEK'.

verdigin ornek icin tskler.bu stored procuder yi delphi icersinden nasil cagiracagim yani sql sorgusu icersinde nerede belirtecegim .ay adli bir alanim yok tarihten aliyorum ayı
tekrar tskler.
Garibanus
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: extract(month)

Mesaj gönderen emin_as »

Yazim hatasi yapiyorsun

Kod: Tümünü seç

extract(week from sevkdetail.sevktarihi)as sevk_ayi from sevkdetail 
Yukarıdaki bir procedure en rahat, ems manager veya flamerobin gibi bir sql aracı kullanarak veritabanina ekleyebilirsin. EMS ücretli, flamerobin ücretsizdir.
Flamerobin i aşagıdaki adresten indirebilirsin.

http://www.flamerobin.org/
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: extract(month)

Mesaj gönderen Vital »

hocam tskler. deneyecegim
fakat yukaridaki satirda
extract(week from sevkdetail.sevktarihi)as sevk_ayi from sevkdetail ) evet dogru satir bu month ile week i aceleden yanyana yazmisim.
fakat extract(week from sevkdetail.sevktarihi)as sevk_ayi from sevkdetail ) satirda da week de hata veriyor.

ilginiz icin tskler.
Garibanus
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: extract(month)

Mesaj gönderen emin_as »

Week firebird 2.1 ile geldi, eger önceki versiyonları kullanıyorsan, week hata verir.
Denetim masasındaki firebird ikonunu tıklatıp, versiyonunu kontrol et.
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: extract(month)

Mesaj gönderen Vital »

fb 2.1.0(win32) :N(
Garibanus
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: extract(month)

Mesaj gönderen Hakan Can »

Şu SQL cümlesini test edip varsa hata mesajını aynen yazabilir misin? Belki daha sonraki bir versiyona yükseltmelisin (bendeki 2.1.1 ve hata vermiyor).

Kod: Tümünü seç

SELECT EXTRACT(WEEK FROM CURRENT_TIMESTAMP) AS WEEK FROM RDB$DATABASE
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: extract(month)

Mesaj gönderen emin_as »

Kod: Tümünü seç

IBQuery2.SQL.Add( 'select  extract (week from sevkdetail.sevktarihi) as sevk_ayi, sum(sevkdetail.sevkadeti) as top_sevki from sevkdetail ');
IBQuery2.SQL.Add( 'where sevktarihi>='''+datetostr(DateTimePicker1.date)+''' AND 
sevkdetail.sevktarihi<='''+datetostr(DateTimePicker2.date)+'''  ');
IBQuery2.SQL.add('GROUP BY  1' );
Sql ini bir de yukarıdaki gibi düzenleyip, dene.
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: extract(month)

Mesaj gönderen Vital »

arkadaslar tekrar tskler. sayenizde cozdum fb yi kaldirip tekrar kurdum simdi ok.

tskler.
Garibanus
Cevapla