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
şimdiden vermiş olduğunuz cevaplar için teşekkür ederim
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
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
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 )