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?
ORACLE Alana uymayan karakter bulma, mesela sayı olmayanları
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
strrakam
-----------
1a254
b354
şeklinde sonuç döndürüyor. oracle da buna benzer bir fonksiyonu bulmanız lazım.
Kolay gelsin.
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
-----------
1a254
b354
şeklinde sonuç döndürüyor. oracle da buna benzer bir fonksiyonu bulmanız lazım.
Kolay gelsin.
cevap
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..
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.
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>