| true_false | 03.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 | |
| miskin | 03.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_false | 03.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 | |
| onaydin | 03.08.2005 - 16:10:15 |
| 12.11.1986 tarih alanın uzunlugu sabit mi yoksa 1.1.1986 seklinde olanları da var mı? | |
| true_false | 03.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 | |
| onaydin | 03.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_false | 03.08.2005 - 17:48:12 |
| problem çözülmüştür ilginiz için teşekkürler | |