programing

Oracle PL/SQL : 문자열에서 "공백 문자" 제거

testmans 2023. 7. 9. 10:37
반응형

Oracle PL/SQL : 문자열에서 "공백 문자" 제거

Oracle 10g 데이터베이스에서 테이블 필드의 값에서 "공백 문자"(공백, 탭, 캐리지 리턴 등)를 제거하려고 합니다.

아이즈TRANSLATE()가는 길?예를 들어 다음과 같은 것이 있습니다.

MY_VALUE := TRANSLATE(MY_VALUE,
  CHR(9) || CHR(10) || CHR(11) || CHR(12) || CHR(13) || ' ', '');

아니면 더 나은 대안이 있을까요?[:space:]PHP PCRE에서)?

조언을 해주셔서 감사합니다.

저는 regexp_replace를 원하지만 PL/SQL에서 사용할 수 있는지 100% 확신할 수는 없습니다.

my_value := regexp_replace(my_value, '[[:space:]]*',''); 

단축 버전:

REGEXP_REPLACE( my_value, '[[:space:]]', '' )

다음과 같습니다.

REGEXP_REPLACE( my_value, '\s')

위의 두 문 모두 "null" 문자를 제거하지 않습니다.

문을 대체하여 "null"을 제거하려면 다음과 같이 하십시오.

이와 같은 경우:

REPLACE(REGEXP_REPLACE( my_value, '\s'), CHR(0))

정규식에 익숙하기 때문에 REGEXP_REPLACE 함수를 사용하는 것이 좋습니다.[:space:] POSIX 클래스와 일치하는 항목을 제거하려는 경우

REGEXP_REPLACE( my_value, '[[:space:]]', '' )


SQL> ed
Wrote file afiedt.buf

  1  select '|' ||
  2         regexp_replace( 'foo ' || chr(9), '[[:space:]]', '' ) ||
  3         '|'
  4*   from dual
SQL> /

'|'||
-----
|foo|

모든 연속 공백 문자 집합에 대해 하나의 공백을 남겨두려면 다음을 추가합니다.+정규식에 사용하고 공백을 대체 문자로 사용합니다.

with x as (
  select 'abc 123  234     5' str
    from dual
)
select regexp_replace( str, '[[:space:]]+', ' ' )
  from x
select regexp_replace('This is a test   ' || chr(9) || ' foo ', '[[:space:]]', '') from dual;

REGEXP_REPLACE
--------------
Thisisatestfoo

하나 이상의 공백 문자를 하나의 공백으로 바꾸려면 사용해야 합니다.{2,}대신에*그렇지 않으면 당신은insert공백이 아닌 모든 문자 사이의 공백

REGEXP_REPLACE( my_value, '[[:space:]]{2,}', ' ' )

사용할 수 있는 공백을 제거하려면 다음과 같이 하십시오.

myValue := replace(replace(replace(replace(replace(replace(myValue, chr(32)), chr(9)),  chr(10)), chr(11)), chr(12)), chr(13));

예: 표의 모든 공백 제거:

update myTable t
    set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
    length(t.myValue) > length(replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13)));

또는

update myTable t
    set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
    t.myValue like '% %'

언급URL : https://stackoverflow.com/questions/5505835/oracle-pl-sql-remove-space-characters-from-a-string

반응형