source

Oracle 함수가 있는 문자열에서 숫자 추출

ittop 2023. 7. 6. 22:45
반응형

Oracle 함수가 있는 문자열에서 숫자 추출

문자열을 매개 변수로 사용하는 Oracle DB 함수를 만들어야 합니다.문자열에는 문자와 숫자가 포함되어 있습니다.저는 이 문자열에서 모든 숫자를 추출해야 합니다.예를 들어 RO1234와 같은 문자열이 있으면 함수를 사용할 수 있어야 합니다.extract_number('RO1234')결과는 1234가 될 것입니다.

더 정확하게 말하자면, 이것은 이 함수가 사용되는 종류의 SQL 쿼리입니다.

SELECT DISTINCT column_name, extract_number(column_name) 
FROM table_name
WHERE extract_number(column_name) = 1234;

질문:.Oracle SQL Developer 또는 SQLTools 클라이언트 애플리케이션을 사용하여 위의 예와 같은 기능을 Oracle 데이터베이스에 추가하려면 어떻게 해야 합니까?

사용할 수 있습니다.REGEXP_REPLACE문자열에서 숫자가 아닌 모든 문자를 제거하려면:

select regexp_replace(column_name, '[^0-9]', '')
from mytable;

또는

select regexp_replace(column_name, '[^[:digit:]]', '')
from mytable;

물론 당신은 함수를 쓸 수 있습니다.extract_number하지만 하나의 함수 호출 자체만으로 구성된 함수를 작성하는 것은 약간 오버킬처럼 보입니다.

create function extract_number(in_number varchar2) return varchar2 is
begin
  return regexp_replace(in_number, '[^[:digit:]]', '');
end; 

문자열에서 숫자를 추출하는 데 정규식을 사용할 수 있습니다.확인해 보겠습니다.이것이 텍스트와 숫자 'stack12345 overflow569'를 혼합한 문자열이라고 가정합니다.이것은 작동해야 합니다.

select regexp_replace('stack12345overflow569', '[[:alpha:]]|_') as numbers from dual;

"12345569"를 반환합니다.

또한 다음을 사용할 수 있습니다.

select regexp_replace('stack12345overflow569', '[^0-9]', '') as numbers,
       regexp_replace('Stack12345OverFlow569', '[^a-z and ^A-Z]', '') as characters
from dual

숫자의 경우 "12345569"를 반환하고 문자의 경우 "StackOverFlow"를 반환합니다.

이것은 나에게 효과가 있습니다. 나는 문자열의 첫 번째 숫자만 필요합니다.

TO_NUMBER(regexp_substr(h.HIST_OBSE, '\.*[[:digit:]]+\.*[[:digit:]]*'))

필드에 다음 문자열이 있습니다."(43 Paginas) REGLAS DE PARTICIPACION".

결과 필드:43

10진수 문자열이 올바른 10진수인 첫 번째 숫자를 찾는다면 다음과 같은 기능을 사용해 볼 수 있습니다.

regexp_substr('stack12.345overflow', '\.*[[:digit:]]+\.*[[:digit:]]*')

문자열에서 문자를 추출하는 방법

SELECT REGEXP_REPLACE(column_name,'[^[:alpha:]]') alpha FROM DUAL 

문자열 'A0807'에서 월과 년을 추출하기 위해 PL/SQL에서 다음을 수행했습니다.

DECLARE
    lv_promo_code VARCHAR2(10) := 'A0807X';
    lv_promo_num VARCHAR2(5);
    lv_promo_month NUMBER(4);
    lv_promo_year NUMBER(4);
    BEGIN
    lv_promo_num := REGEXP_SUBSTR(lv_promo_code, '(\d)(\d)(\d)(\d)');

lv_promo_month := EXTRACT(month from to_date(lv_promo_num, 'MMYY'));
DBMS_OUTPUT.PUT_LINE(lv_promo_month);
lv_promo_year := EXTRACT(year from to_date(lv_promo_num, 'MMYY'));
DBMS_OUTPUT.PUT_LINE(lv_promo_year);
END;

언급URL : https://stackoverflow.com/questions/32861256/extract-number-from-string-with-oracle-function

반응형