programing

Oracle: 숫자 값만 있는 행을 반환하는 SQL 쿼리

megabox 2023. 3. 15. 19:29
반응형

Oracle: 숫자 값만 있는 행을 반환하는 SQL 쿼리

"a1b2c3", "abc", "1ab", "123", "156" 등의 값을 가진 X라는 필드가 있습니다.

순수 숫자 값 = 문자가 없는 X만 반환하는 sql 쿼리를 작성하려면 어떻게 해야 합니까?위의 예에서는 '123'과 '123'이 됩니다.

myTable에서 X를 선택합니다.여기서...

를 사용할 수 있습니다.REGEXP_LIKE다음과 같이 기능:

SELECT X 
FROM myTable 
WHERE REGEXP_LIKE(X, '^[[:digit:]]+$');

샘플 실행:

SQL> SELECT X FROM SO;

X
--------------------
12c
123
abc
a12

SQL> SELECT X  FROM SO WHERE REGEXP_LIKE(X, '^[[:digit:]]+$');

X
--------------------
123

SQL> 

고려해야 할 문자가 문자뿐일 경우 다음을 수행할 수 있습니다.

select X from myTable where upper(X) = lower(X)

하지만 물론 그것은 다른 캐릭터들을 걸러내지는 않을 것이다, 단지 글자.

Oracle 12c 이후(적어도) 문자 값이 숫자인지 확인하는 기능이 내장되어 있습니다.VALIDATE_CONVERSION

select X from myTable where validate_conversion(X as number) = 1

Oracle 10 이상을 사용하는 경우 코드 주소 제안대로 regexp 함수를 사용할 수 있습니다.이전 버전에서는translate기능은 다음을 지원합니다.

select * from tablename  where translate(x, '.1234567890', '.') is null;

Oracle 번역 기능에 대한 자세한 내용은 여기를 클릭하거나 공식 문서 "SQL Reference"를 참조하십시오.

UPD: 번호에 기호나 공백이 있으면 "를 추가할 수 있습니다.+-의 두 번째 파라미터에 대한 문자translate기능.

1.1E10, +1, -0 등은 어떻습니까?가능한 모든 숫자를 분석하는 것은 많은 사람들이 생각하는 것보다 더 까다롭다.가능한 한 많은 숫자를 포함하려면 PL/SQL 함수에 to_number 함수를 사용해야 합니다.http://www.oracle-developer.net/content/utilities/is_number.sql 에서 :

CREATE OR REPLACE FUNCTION is_number (str_in IN VARCHAR2) RETURN NUMBER IS
   n NUMBER;
BEGIN
   n := TO_NUMBER(str_in);
   RETURN 1;
EXCEPTION
   WHEN VALUE_ERROR THEN
      RETURN 0;
END;
/

Oracle 11.1의 regexp_like 함수 및 기타 regexp 함수 전체 목록은 다음과 같습니다.

http://66.221.222.85/reference/regexp.http://66.221.222.85

이 예에서는 다음과 같습니다.

SELECT X
FROM test
WHERE REGEXP_LIKE(X, '^[[:digit:]]$');

다음 명령을 사용할 수 있습니다.

LENGTH(TRIM(TRANSLATE(string1, '+-.0123456789', '')))

다음 경우 NULL이 반환됩니다.string1숫자

문의는 다음과 같습니다.

select * from tablename 
where LENGTH(TRIM(TRANSLATE(X, '+-.0123456789', ''))) is null

언급URL : https://stackoverflow.com/questions/3932230/oracle-sql-query-that-returns-rows-with-only-numeric-values

반응형