2013-11-22 1 views
1

나는 varchar colunm 있습니다. 내용으로오라클 반환 사이에 예상되지 않습니다

ColumnX 
________ 
ABC 
DEF 
1 
2 
3 
4 
40 
50 

나는 그래서이 SQL을 4 번 1 사이를 얻을 필요가

SELECT columnX 
FROM table 
WHERE regexp_substr(columnX, '[[:digit:]]') BETWEEN 1 and 4; 

하지만 난 얻을 내 결과는 1,2,3,4 및 40 무엇하여야한다입니다 나는 그것을 올바르게 얻는가?

+1

가 보이는 확실히 그것은 단지 하나 개의 문자를 확인합니다 (즉 1보다 큰 항목과 일치하지 않는 경우)? – Charleh

+0

예, 1에서 5 사이로 설정하면 추가로 50이 발생합니다. – user1761160

답변

1

두 개 이상의 문자를 일치 시키려면 한정 기호를 사용해야합니다. 이 경우 문자 (숫자) (이 경우에는 하나 이상)와 일치하는 + 한정 기호를 사용했습니다.

이 시도 :

출력
WITH 
    test_data AS 
    (SELECT 'ABC' AS columnX FROM dual 
    UNION ALL SELECT '1' FROM dual 
    UNION ALL SELECT '2' FROM dual 
    UNION ALL SELECT '3' FROM dual 
    UNION ALL SELECT '4' FROM dual 
    UNION ALL SELECT '40' FROM dual 
    UNION ALL SELECT '50' FROM dual 
) 
SELECT columnX 
    FROM test_data 
WHERE regexp_substr(columnX, '[[:digit:]]+') BETWEEN 1 AND 4; 

:

이 정규식은, 첫 번째 문자 또는 열을 확인 당신이 할 그것을 확장 할 수 있었던 것처럼
COLUMNX 
------- 
1  
2  
3  
4
+0

내 문제는 숫자가 100까지 증가 할 수 있다는 것입니다. 나는 100 줄을 추가해야합니까? – user1761160

+0

+ 기호를 추가하면 고맙습니다. 감사 – user1761160

관련 문제