2012-10-01 2 views
5

어떤 열 값이 숫자로 시작하는 모든 행을 찾고 싶습니다.Oracle SQL : 숫자로 시작하는 검색 열

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') 

을하지만 너무 깁니다 :

그것은이 요청을 잘 작동합니다.

도움 주셔서 감사합니다.

+1

[LIKE] (http://docs.oracle.com/cd/B19200/01/server.102/b14200/conditions007.htm)를 사용하면 이것에 꼭 맞는다. – Yaroslav

답변

1

in를 사용해보십시오 :

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 편리 할 것입니다 훨씬 짧은

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

또는 사용 문자 클래스

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

BETWEEN는 당신이 필요로하는 모든입니다! (! NOT NULL이 경우 암시 적)

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

해당 컬럼에 인덱스를 가지고 있고,이 솔루션의 작은 dirtyness를 괜찮다면, 당신도 그 속도를 높일 수 :

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

여기서는 NO_ART_TECH_OI에 아스키 코드> 126 인 문자가 없다고 가정합니다.

관련 문제