2012-10-01 9 views
5

Tüm sütun değerlerinin bir basamakla başladığı satırları bulmak istiyorum.Oracle SQL: basamaklarla başlayan arama sütunu

WHERE trim(u_ods_val3.ods_itn_PHRSBMO.NO_ART_TECH_OI) IS NOT NULL 
    AND (SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1)='0' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='1' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='2 ' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='3' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='4' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='5' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='6' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='7' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='8' 
    OR SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) ='9') 

Ama çok uzun:

Onun bu isteğe iyi çalışır.

Yardımlarınız için teşekkür ederiz.

+1

[LIKE] kullanın (http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions007.htm), tam bunun için – Yaroslav

cevap

1

in kullanmayı deneyin:

WHERE trim(u_ods_val3.ods_itn_PHRSBMO.NO_ART_TECH_OI) IS NOT NULL 
    AND SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) in ('0','1','2','3','4','5','6','7','8','9') 
18

Regexp_like kullanışlı olacağını ve çok daha kısa

where regexp_like(trim(col_name), '^[0-9]') 

kullanarak veya karakter sınıfı

where regexp_like(trim(col_name), '^[[:digit:]]') 
1

BETWEEN tüm ihtiyaç vardır! (! NOT NULL bu durumda örtülü olan)

WHERE SUBSTR(u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI,0,1) between '0' and '9' 

o sütun üzerinde dizin var ve bu çözümün küçük dirtyness sakıncası yoksa, sen bile hızlandırabilir:

WHERE u_ods_val3.ODS_ITN_PHRSBMO.NO_ART_TECH_OI between '0' and '9~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 

Bu, NO_ART_TECH_OI'nin ascii kodu> 126 ile karakter içermediğini varsayar.