interbase'de string alanı editleme
true_false03.08.2005 - 12:35:47
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 Question

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

 
miskin03.08.2005 - 13:54:35
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_false03.08.2005 - 14:28:27
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:
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
 
onaydin03.08.2005 - 16:10:15
12.11.1986 tarih alanın uzunlugu sabit mi yoksa 1.1.1986 seklinde olanları da var mı?
 
true_false03.08.2005 - 16:15:25
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

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

onunla uğraşıyom bi önerin varsa mutlaka dinlerim herkese kolay gelsin
 
onaydin03.08.2005 - 16:36:39
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_false03.08.2005 - 17:48:12
problem çözülmüştür ilginiz için teşekkürler
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com