it-source

ORACLE TRIM 및 RTRIM: TRAILING(트레일링…)을 두 개 이상의 문자로 선택하시겠습니까?

criticalcode 2023. 9. 28. 08:26
반응형

ORACLE TRIM 및 RTRIM: TRAILING(트레일링…)을 두 개 이상의 문자로 선택하시겠습니까?

왜 'm'자가 쿼리를 따를 때 특별한 역할을 합니까?TRIM 기능을 생성하려고 했는데 막혔습니다.또는: 듀얼 테이블과 다른 테이블에서 쿼리할 때 차이점은 무엇입니까?

예.

1열 2개의 값('adam', 'apperda')으로 표를 만들었습니다.

create table x
(col1 varchar2(20));
insert into x values ('adam');
insert into x values ('apperda');

그런 다음 TRIM(TRAILING…)과 RTRIM을 다음과 같이 선택합니다.

select 
col1,
trim(trailing 'am' from col1) traling,
rtrim(col1, 'am') rtim
from x;

그리고 결과: 'ad'와 'apperd'.

COL1                 TRALING              RTIM                
-------------------- -------------------- --------------------
adam                 ad                   ad                  
apperda              apperd               apperd              

나는 이해할 수 없습니다.apperd결과가 나타납니다.오류 메시지여야 합니다. ORA-30001: 트림 세트는 문자가 하나만 있어야 합니까?

다른 두 가지 선택을 시도했습니다.

  1. 선택 항목에서 트림(트레일링…) 부분을 제거했습니다.

    select
    col1,
    trim(trailing 'am' from col1) traling
    from x;
    
  2. 듀얼에서선택

    select
    trim(trailing 'am' from 'apperda'),
    from dual;
    

두 쿼리 모두 오류 메시지를 표시합니다.

ORA-30001: 트림 세트에는 한 문자만 있어야 합니다.

쿼리의 더하기 행은 더하기 정보를 제공합니까?아니면 어떻게 가능할까요?그리고 그것은 단지 질문이 아니라 두 데이터처럼 보입니다 (adam그리고.apperda상호 작용:

간단한 쿼리를 생성합니다.apperda오류를 표시합니다.

select 
trim(trailing 'am' from 'apperda') traling,
rtrim('apperda', 'am') rtim
from dual

ORA-30001: 트림 세트에는 한 문자만 있어야 합니다.


핵심 예시(2018-07-05)

create table trims
(col varchar2(20));

insert into trims values ('dream');

select
    trim(trailing 'am' from col)
    rtrim(col, 'am')
from trims;

트림(트레일링...)에 두 개의 문자가 있으므로 선택 항목의 첫 번째 행에 오류 ORA-30001이 표시됩니다.그러나 스크립트는 다음과 같이 실행됩니다.

TRIM(TRAILING'AM'FROMCOL)   RTRIM(COL,'AM')
-----------------------------------------------
dre                         dre

그리고: 트림(트레일린...)이 rtrim(...)에 따라 달라지는 것 같습니다. rtrim(...)을 지우면 오류 메시지가 그대로 나타납니다.

select
    trim(trailing 'am' from col)
    --rtrim(col, 'am')
from trims;
`ORA-30001: trim set should have only one character`

이것이 커널 최적화의 부작용인지 궁금합니다.효과적으로trim(trailing 'am' from col)그리고.rtrim(col, 'am')동일한 작업입니다.그래서 만약 우리가 그들을rtrim(col, 'am')두번째 오라클은 신경쓰지 않습니다.trim(trailing 'am' from col)그러나 단순히 결과를 반환합니다.rtrim()대신.

따라서 이러한 쿼리가 잘린 결과를 반환하는 동안...

select
    trim(trailing 'am' from col)
    , rtrim(col, 'am')
from trims;
/

select
    trim(trailing 'ax' from col)
    , rtrim(col, 'ax')
from trims;
/

... 실행 헐의 순서 바꾸기ORA-30001: trim set should have only one character:

select
    rtrim(col, 'am')
    , trim(trailing 'am' from col)
from trims;
/

트림에 다양한 값을 제공하는 것도 마찬가지입니다.

select
    trim(trailing 'am' from col)
    , rtrim(col, 'ax')
from trims;
/

이 이론의 한 가지 문제점은 Oracle이 왼쪽에서 오른쪽으로 실행되는 기능을 실행한다는 것입니다.오라클이 환자들이 병원에 입원했을때마다trim()는 쿼리에서 가장 오른쪽에 있는 함수 호출로 Oracle이 처음 실행될 때 이의를 제기할 것으로 예상됩니다.

언급URL : https://stackoverflow.com/questions/51022664/oracle-trim-and-rtrim-the-trim-trailing-select-with-more-than-one-character

반응형