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 01:59
Konum: Ankara

ORACLE Alana uymayan karakter bulma, mesela sayı olmayanları

Mesaj gönderen Kacak » 11 Eki 2005 04:06

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 09:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX » 11 Eki 2005 04:42

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 01:59
Konum: Ankara

cevap

Mesaj gönderen Kacak » 09 Kas 2006 02:41

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 02:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Mennan
Üye
Mesajlar: 144
Kayıt: 22 Haz 2004 02:22
Konum: Istanbul
İletişim:

Mesaj gönderen Mennan » 10 Kas 2006 07:45

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