SP de tarih çıkarma

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ı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

SP de tarih çıkarma

Mesaj gönderen mege »

firebird 1.5

Kod: Tümünü seç

CREATE PROCEDURE NEW_PROCEDURE(INPUTHOUR INTEGER)
RETURNS (
    V_RESULT INTEGER)
AS
declare variable TURNDAY INTEGER;
begin

   TURNDAY = 0;
   if ((INPUTHOUR*3600) > CURRENT_TIME) then TURNDAY=1;

   SELECT COUNT(BATCHCODE) FROM JOBARCHIVE
   WHERE (REQUESTTIME >= CURRENT_TIME-(:INPUTHOUR*3600))
   AND (JOBDATE >= (CURRENT_DATE-:TURNDAY))
   INTO V_RESULT;
   V_RESULT = COALESCE (V_RESULT,0);
  suspend;
end

bir tabloda ayrı alanlarda tarih ve saat bilgim var.
Sp ye giren N (INPUTHOUR) saat öncesinin raporunu alıcam.

şimdi bu N saat bi önceki güne geçiyosa günü bi gün geri alıcak mantık basit esasındada type hatası oluşyoır. Cast ile yaptım yine hata verdi
Overflow occurred during data type conversion.
conversion error from string "36000".
burda bu satırı kapatıp
if ((INPUTHOUR*3600) > CURRENT_TIME) then TURNDAY=1;

TURNDAY=1; ı elle bir yaptığımda istediğim sonucu alıyorum. ancak şu karşılaştırma olayını yapamadım.

nasıl yapılablir.

ek: en fazla 23 saat geriye gidilceği için tek günlük bi kontrol yeterli.
teşekkürler
.-.-.-.-.-.-.-. ^_^
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

COALESCE string değer geri döndürüyor. Ben de şaşırmıştım. AResult'a coalesce ile değeri verme. Direkt ver. null kontrolunu if ile yap.

Gerçi mege ne yaptıysam ne istediğini tam anlamadım. :) Şöyle birşey yazmıştım. İşini görür mü?

viewtopic.php?t=7340
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

dicektim tam buldum sanırım

Kod: Tümünü seç

CREATE PROCEDURE NEW_PROCEDURE(INPUTHOUR INTEGER)
RETURNS (
    V_RESULT INTEGER)
AS
declare variable TURNDAY INTEGER;
begin

   TURNDAY = 0;
   if (cast((:INPUTHOUR||':00:00') as time)  > CURRENT_TIME ) then TURNDAY=1;

   SELECT COUNT(BATCHCODE) FROM JOBARCHIVE
   WHERE (REQUESTTIME >= CURRENT_TIME-(:INPUTHOUR*3600))
   AND (JOBDATE >= (CURRENT_DATE-:TURNDAY))
   INTO V_RESULT;
   V_RESULT = COALESCE (V_RESULT,0);
  suspend;
end
.-.-.-.-.-.-.-. ^_^
Cevapla