본문 바로가기
오라클 게시판/오라클 함수

[오라클 함수] NLSSORT 함수

by 기서무나구물 2018. 12. 25.

포스팅 목차

     

    o NLSSORT

     


    문법

     

    nlssort::=

     


    목적

    NLSSORT함수는 char를 정렬하기 위하여 이용되는 bytes의 문자열을 반환한다.

    char과 'nslparam'의 데이터형은 CHAR, VARCHAR2, NCHAR, NVARCHAR2를 취한다. 반환되는 문자열은 RAW 데이터형이다.

    'nlsparam'의 값은 이 형태를 가질 수 있다.

    'NLS_SORT = sort'
    

    sort는 언어상 소트 순서 또는 BINARY 중에 하나이다. 만약 'nlsparam'을 생략하면, 이 함수는 세션에 대하여 기본적 소트 순서를 이용한다. 만약 BINARY를 지정하면, 이 함수는 char을 반환한다. 만약 'nlsparam'을 지정했다면, 접미사 -ai를 추가하여 accent-insensitive(엑센트 기호 유무가 필요 없는) 소트를 하거나,-ci를 추가하여 case-insensitive(대소 문구분이 없는) 소트를 실시할 수 있다.

    accent- 와 case-insensitive 소트에 대해서는 Oracle Database Globalization Support Guide 참조.

    이 함수는 CLOB 데이터를 직접적으로 지원하지 않는다. 그러나, CLOB는 암묵적 데이터 변환을 통해서 인수로 전달될 수 있다.

    NLSSORT 함수는 입력 문자열을 소팅하여 문자열을 반환. 단어의 withe space나 문자가 알파 문자열이 아니더라도 상관없다. nlsparam는 ‘nls_sort = sort'와 같은 형식을 가지며, 여기서 sort는 linguistic sort sequence나 binary중의 하나이다.

     


    예제

    이 함수는 문자열의 이진수 값보다는 언어 소트 기준을 기본으로 한 소트와 비교를 지정할 수 있다. 다음 예제는 2개의 값을 포함한 test 테이블을 생성하고, 어떻게 값이 NLSSORT함수에 의해 순서화되는가를 볼 수 있다.

    Oracle Program
    CREATE TABLE test (name VARCHAR2(15));
    INSERT INTO test VALUES ('Gaardiner');
    INSERT INTO test VALUES ('Gaberd');
    INSERT INTO test VALUES ('Gaasten');
    
    SELECT * FROM test ORDER BY name;

     

    Results
    NAME
    ---------------
    Gaardiner
    Gaasten
    Gaberd

     


    Oracle Program
    SELECT * 
    FROM   test 
    ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');

     

    Results
    NAME
    ---------------
    Gaberd
    Gaardiner
    Gaasten

     


    다음 예제는 비교 연산으로 NLSSORT 함수를 이용하는 방법을 보여준다.

    Oracle Program
    SELECT * FROM test WHERE name > 'Gaberd';

     

    Results
    no rows selected

     


    Oracle Program
    SELECT * 
    FROM   test 
    WHERE  NLSSORT(name, 'NLS_SORT = XDanish') > NLSSORT('Gaberd', 'NLS_SORT = XDanish');

     

    Results
    NAME
    ---------------
    Gaardiner
    Gaasten

     


    만약 빈번하게 동일한 언어 소트 기준을 사용하는 비교 연산으로 이용한다면, 더 효율적 대안을 고려하자: NLS_COMP파라미터(데이터 베이스용이나 현재 세션 어느 쪽이든)에 ANSI를 설정하고, 원하는 소트 기준으로 세션에 대해 NLS_SORT 파라미터를 설정한다. 오라클 데이터 베이스는 현재의 세션에서 모든 소팅과 비교 연산에 대하여 기본적으로 소트 기준을 이용한다.

    Oracle Program
    ALTER SESSION SET NLS_COMP = 'ANSI';
    ALTER SESSION SET NLS_SORT = 'XDanish';
    
    SELECT * FROM test WHERE name > 'Gaberd';

     

    Results
    NAME
    ---------------
    Gaardiner
    Gaasten

     

     


    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크
    반응형

    댓글