ORACLE Alana uymayan karakter bulma, mesela sayı olmayanları

Oracle veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
Kacak
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 02:59
Konum: Ankara

ORACLE Alana uymayan karakter bulma, mesela sayı olmayanları

Mesaj gönderen Kacak »

Merhaba, elimde başka bir kurumdan aldığımız ve tırnakla ayrılmış text olarak kaydedilmiş data var. Sayı olması gereken bir alana yanlışlıkla sayı dışında bir karakter girilmiş, bu yüzden de kendi veritabanımıza atarken sayı olarak değil de karakter olarak atabildik.

Milyonlarca kayıt içinde bir alana girilen ve 0-9 arası sayı dışındaki bir karakteri bulan SQL cümlesini bilen var mı acaba?
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Ben oracle ı hiç kullanmadım. Ama Mssql deki isnumeric fonksiyonunun karşılığı varsa bunu kolaylıkla halledebilirsiniz.

varchar olan bir alana 1235,1a25,bg25 şeklinde veri girilip aşağıdaki kod çalıştırılırsa

Kod: Tümünü seç

select strrakam   from VASITA where  isnumeric(strrakam) =0

strrakam
-----------
1a254
b354

şeklinde sonuç döndürüyor. oracle da buna benzer bir fonksiyonu bulmanız lazım.
Kolay gelsin.
Kullanıcı avatarı
Kacak
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 02:59
Konum: Ankara

cevap

Mesaj gönderen Kacak »

uğraşırken bulmuşum. (SUBSTR(ALAN,1,1) kısmını değiştirip 2. 3. 4. karakterlerde de arama yapabiliyoruz. En fazla 9 SQL'de iş bitmiş oluyor. Cevaplayan arkadaşlara teşekkürler.

SELECT * FROM TABLO
WHERE NOT (SUBSTR(ALAN,1,1) BETWEEN '0' AND '9')



ilk karakterde 0-9 arası olmayan karakterleri arar..
En son Kacak tarafından 14 Nis 2008 03:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Mennan
Üye
Mesajlar: 144
Kayıt: 22 Haz 2004 03:22
Konum: Istanbul
İletişim:

Mesaj gönderen Mennan »

Kod: Tümünü seç

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
Connected as hr

SQL> 
SQL> drop table t;

Table dropped

SQL> CREATE TABLE t AS SELECT * FROM  (  SELECT '1234567890' x
  2             FROM dual
  3           UNION
  4           SELECT '12345s67890' x
  5             FROM dual
  6           UNION
  7           SELECT 'q1234567890' x
  8             FROM dual
  9           UNION
 10           SELECT '1234567890a' x
 11             FROM dual
 12           UNION
 13           SELECT 'sdsa' x FROM dual);

Table created

SQL> SELECT * FROM t;

X
-----------
1234567890
1234567890a
12345s67890
q1234567890
sdsa

SQL> SELECT * FROM t WHERE length( trim(translate(t.x,'1234567890',' ')) ) > 0;

X
-----------
1234567890a
12345s67890
q1234567890
sdsa

SQL> SELECT * FROM t WHERE regexp_like(t.x,'^[0-9]*$');--sadece 10G!!!!

X
-----------
1234567890

SQL> 
Cevapla