interbase'de string alanı editleme

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
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

interbase'de string alanı editleme

Mesaj gönderen true_false »

merhabalar veri tabanı firebird / interbase;
tablo adı = ILAC_TABLOSU
tablo alanları :
....
...
RUHSAT VARCHAR(30);
RAHSAT_TARIH VARCHAR(25);
LISAN_NUMBER VARCHAR(25);
....
...
..
SORU:
RUHSAT alanımdaki kayıtlar şu şekilde 12.11.1986/9569-625
12.11.1986 ruhsat tarihi
9569-625 ise lisanas numarası
RUHSAT alanımda bulunan kayıtları ruhsat tarihi ve lisans numarasnı ayırarak ilgili alanlarıma (RUHSAT_TARIH,LISANS_NUMBER) aktarmak istiyorum. Bunu Nasıl Yapabilrim :?:

:arrow: şimdiden vermiş olduğunuz cevaplar için teşekkür ederim

type
Tform1 = class(Tform)
Kullanıcı avatarı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

eger udf yazmak istemiyorsan, substring ve cas la sql de cözülür,
fazla degerin yoksa, query ve while döngüsü ile de cözebilirsin.

miskin
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

UDF kullanıyorum kayıt sayısı ise 3bin 6 yüz kusur aslında bir bölümünüde bitirdim ama datalar arasında dolaşırken string overflow hatası alıyorum
daha tam olarak düzenliyemediğim kod:

Kod: Tümünü seç

CREATE PROCEDURE PROC_RUHSAT 
RETURNS (
    VAR_ID INTEGER,
    OUT_LICENCE VARCHAR(40),
    OUT_RUHSAT_TARIH DATE)
AS
DECLARE VARIABLE VAR_DATE VARCHAR(20);
DECLARE VARIABLE VARINDEX SMALLINT;
DECLARE VARIABLE VAR_RUHSAT VARCHAR(80);
begin
 FOR
    SELECT
           IL.RECORD_ID,
           IL.RUHSAT
    FROM ILAC_TABLASO IL
    INTO :VAR_ID,
         :VAR_RUHSAT

 DO
 BEGIN
         if (:VAR_RUHSAT <> '') then
        BEGIN
            VARINDEX =StrPos('/', :VAR_RUHSAT);
            VAR_DATE = substr(:VAR_RUHSAT,0, :VARINDEX);
            VAR_DATE = rtrim(:VAR_DATE);
            VAR_DATE = ltrim(:VAR_DATE);

 /*            IF (VAR_DATE = '') THEN OUT_RUHSAT_TARIH = NULL;
            ELSE  */OUT_RUHSAT_TARIH = CAST (VAR_DATE AS DATE);


          OUT_LICENCE = substr(:VAR_RUHSAT, :VARINDEX + 2, StrLen(:OUT_RUHSAT_TARIH));
        END
        IF (OUT_LICENCE = '') THEN OUT_LICENCE = NULL;

        IF (VAR_ID IS NOT NULL) THEN
        BEGIN
           UPDATE ILAC_TABLASO I SET I.RUHSAT_TARIHI=:OUT_RUHSAT_TARIH, I.RUHSAT_NO=:OUT_LICENCE
           WHERE I.RECORD_ID =:VAR_ID;
        END
    suspend;
  END

end
type
Tform1 = class(Tform)
onaydin

Mesaj gönderen onaydin »

12.11.1986 tarih alanın uzunlugu sabit mi yoksa 1.1.1986 seklinde olanları da var mı?
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

yok hocam tarih alanları ay ve gün en az 2 hane (01.01.1118) fakat bir kaça kayıtta şu problem var mesela bazı RUHSAT alanı 01.01.1118-6636 bunu 3 bin 6yuz kusur kayıtta tarıyarak bulabildim (Kafayı Kırdıktan Sonra) alanın 01.01.1118/6636 olması lazım

Kod: Tümünü seç

 VARINDEX =StrPos('/', :VAR_RUHSAT); 

onunla uğraşıyom bi önerin varsa mutlaka dinlerim herkese kolay gelsin
type
Tform1 = class(Tform)
onaydin

Mesaj gönderen onaydin »

ya hocam o kısım sabitse hiç proc la filan ugrasma select içinde substring ile kes. Diyelimki 0 ila 10 arasını kestin boylece tarihi almış oldun. Sonra ikinci bir alanda
11 ila (length(string) - 10) deger aralığını al. Tabi bunu once select cekerek dene sonra update içinde kullanıverirsin.
(aralıkları tam hesaplamadım sen select cekerken o aralığı ayarlarsın :) )
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

problem çözülmüştür ilginiz için teşekkürler
type
Tform1 = class(Tform)
Cevapla