Oracle/SQL2009. 11. 9. 09:44


오라클에서 쓰이는 단일행 함수를 정리해 보았다.
단일행 함수를 알고 적재적소에 잘 쓰는 것이 SQL의 실력을 한층 더 높여주는 것이라 했다.
필요할 때 또는 심심할 때 한번씩 읽어봐도 괜찮을 것 같다.

* Numeric Functions

1. ABS 
     : ABS(n)은 n의 절대값을 반환한다.

   - usage : ABS(n)

   - example : SELECT ABS(-37) AS absolute FROM DUAL;

                 ABSOLUTE
               ----------
                       37

2. ACOS
      : ACOS(n)은 n의 역코사인(arc cosine)값을 반환한다. 인수 n은 -1부터 1까지의 범위를 갖는다.

   - usage : ACOS(n)

   - example : SELECT ACOS(.7) AS arc_cosine FROM DUAL;

               ARC_COSINE
               ----------
                .79539883

3. ASIN
      : ASIN(n)은 n의 역사인(arc sine)값을 반환한다. 인수 n은 -1부터 1까지의 범위를 갖는다.

   - usage : ASIN(n)

   - example : SELECT ASIN(.7) AS arc_sine FROM DUAL;

                 ARC_SINE
               ----------
               .775397497
                  
4. ATAN
      : ATAN(n)은 n의 역탄젠트(arc tangent)값을 반환한다. 인수 n은 -1부터 1까지의 범위를 갖는다.

   - usage : ATAN(n)

   - example : SELECT ATAN(.7) AS arc_tangent FROM DUAL;

               ARC_TANGENT
               -----------
                .610725964

5. ATAN2
      : ATAN2(m,n)은 ATAN2(m/n)과 같으며, m/n의 역탄젠트(arc tangent)값을 반환한다.
           인수 n은 범위가 제한이 없다.
 
   - usage : ATAN2(m,n), ATAN2(m/n)

   - example : SELECT ATAN2(.5, .3) AS arc_tangent2 FROM DUAL;

               ARC_TANGENT2
               ------------
                 1.03037683

6. BITAND
     : BITAND(m, n)은 인수 m과 인수 n의 비트에 대한 AND연산을 수행하여 정수를 반환한다.
       m과 n은 음이 아닌 정수로 변환되어, AND 연산을 계산하여 정수를 반환한다.
       이 함수는 일반적으로 DECODE함수와 함께 이용한다. AND연산은 2개의 비트를 비교한다.
       값이 같을 경우에는 1을 반환하고 값이 다를 경우에는 0을 반환한다.
       예를 들어, 정수 5(이진수 101)과 1(이진수 001)의 AND연산은 1(이진수 1)이다.

   - usage : BITAND(m, n)

   - example : SELECT BITAND(5, 1) AS bitand FROM DUAL;

                   BITAND
               ----------
                        1

7. CEIL
     : CEIL은 인수에서 지정한 수를 올림하여 정수를 구하는 함수이다. 음의 수치를 부여하면
       음수측의 가장 가까운 정수를 반환한다.

   - usage : CEIL(n)

   - example : SELECT CEIL(8.6) AS ceiling FROM DUAL;

                  CEILING
               ----------
                        9

8. COS
     : COS은 파라미터 n(라디안으로 표현되는 각도)의 코사인값을 반환한다.

   - usage : COS(n)

   - example : SELECT COS(180 * 3.14159265359/180) AS "cosine of 180" FROM DUAL;

               cosine of 180
               -------------
                          -1

9. COSH
     : COSH은 파라미터 n(라디안으로 표현되는 각도)의 쌍곡 코사인값(hyperbolic cosine)을 반환한다.

   - usage : COSH(n)

   - example : SELECT COSH(0) AS "hyperbolic cosine of 0" FROM DUAL;

               hyperbolic cosine of 0
               ----------------------
                                    1

10. EXP
      : EXP는 e의 n 제곱 값을 반환한다. (e=2.71828183) 이 함수는 인수와 같은 타입의 값을 반환한다.

    - usage : EXP(5)

    - example : SELECT EXP(5) AS "e to the 5th power" FROM DUAL;

               e to the 5th power
               ------------------
                       148.413159

11. FLOOR 
      : FLOOR는 지정한 숫자보다 작거나 같은 정수 중에서 최대값을 반환한다.

    - usage : FLOOR(n)

    - example : SELECT FLOOR(8.6) AS floor FROM DUAL;

                    FLOOR
                ---------
                        8

12. LN
      : LN함수는 입력값의 자연 로그 값을 반환한다. LN은 0보다 큰 값이다.

    - usage : LN(n)

    - example : SELECT LN(37) AS "Natural log of 37" FROM DUAL;

                Natural log of 37
                -----------------
                       3.61091791

13. LOG
      : LOG(m,n)에서 밑을 m으로 한 n의 로그 값을 반환한다. 밑 m은 0 또는 1 이외의 정수값, n은 양수값이다.

    - usage : LOG(m, n)

    - example : SELECT LOG(5, 125) AS "Log base 5 of 125" FROM DUAL;

                Log base 5 of 125
                -----------------
                                3
 
14. MOD
       : MOD는 m을 n으로 나눈 나머지값을 반환한다. n이 0이면, m를 반환한다.
          MOD 공식은 m - n * TRUNC(m/n)이다.
         
    - usage : MOD(m, n)

    - example : SELECT MOD(17, 5) AS modulus FROM DUAL;

                    MODULUS
                -----------
                          2

15. NANVL
       : NANVL는 10g에서 추가된 BINARY_FLOAT, BINARY_DOUBLE과 같은 datatype에만 적용되는 함수이다.
         m의 값이 NaN(Not A Number)일 경우에 n을 반환하고, NaN이 아닐 경우 그냥 m를 반환한다.
         이 함수는 NaN값을 Null으로 매핑하는데 위해 유용하다.

    - usage : NANVL(m, n)

    - example : CREATE TABLE float_point_demo (
             dec_num NUMBER(10,2)
          , bin_double BINARY_DOUBLE
          , bin_float BINARY_FLOAT
           ) 

           INSERT INTO float_point_demo VALUES (1234.56, 1234.56, 1234.56)

         INSERT INTO float_point_demo VALUES (0, 'NaN', 'NaN')

           SELECT * FROM float_point_demo

                DEC_NUM BIN_DOUBLE  BIN_FLOAT
               -------- ---------- ----------
                1234.56 1.235E+003 1.235E+003
                      0        Nan        Nan

                SELECT bin_float, NANVL(bin_float, 0)
             FROM float_point_demo

            BIN_FLOAT NANVL(BIN_FLOAT,0)
               ---------- ------------------
        1.235E+003         1.235E+003
                      Nan                  0

16. POWER
      : POWER는 m의 n승 값을 반환한다. m와 지수 n은 임의의 수이나, m이 음수이면, n은 정수여야 한다.

    - usage : POWER(m, n)

    - example : SELECT POWER(3, 3) AS raised FROM DUAL;

                   RAISED
                ---------
                       27

17. REMAINDER 
      : REMAINDER는 m를 n으로 나눈 나머지를 반환한다. MOD와 유사한데 공식은 m - n * ROUND(m/n)이다.

    - usage : REMAINDER(m, n)

    - example : SELECT MOD (13, 5), REMAINDER(13, 5) AS remainder FROM DUAL;

                   MOD(13,5)     REMAINDER
                ------------  ------------
                           3            -2

18. SIGN
      : SIGN은 파라미터로 주어지는 값의 부호(+, -, 0)에 따라 다음과 같이 반환한다.
           n < 0 일 경우 -1 을 반환
           n = 0 일 경우 0 을 반환
           n > 0 일 경우 1 을 반환

    - usage : SIGN(n)

    - example : SELECT SIGN(-13) AS sign FROM DUAL;

                     SIGN
                ---------
                       -1

19. SIN
      : SIN은 인수 n의 사인(sine)값을 반환한다.(라디안으로 표현되는 각도)
        datatype이 BINARY_FLOAT일 경우, 반환값의 datatype은 BINARY_DOUBLE, 그 외에는 숫자 값을 반환한다.

    - usage : SIN(n)

    - example : SELECT SIN(50 * 3.14159265359/180) AS "sine of 50" FROM DUAL;

                sine of 50
                ----------
                .766044443

20. SINH
       : SINH함수는 인수 n의 쌍곡선 사인(hyperbolic sine)을 반환한다.
         SINH(n)의 값은 (EXP(n) - EXP(-n))/2 의 값과 같다.

    - usage : SINH(n)

    - example : SELECT SINH(2) AS "hyperbolic sine of 2" FROM DUAL;

                hyperbolic sine of 2
                --------------------
                          3.62686041

21. SQRT
       : SQRT는 n의 제곱근을 반환한다. n이 number 타입일 경우에는 n은 음수가 되어서는 안된다.
         BINARY_FLOAT 또는 BINARY_DOUBLE 타입일 경우에는 다음과 같은 값을 반환한다.
           n >= 0 일 경우 양수를 반환
           n = -0 일 경우 -0 을 반환
           n < 0 일 경우 NaN 을 반환

    - usage : SQRT(n)

    - example : SELECT SQRT(7) AS "square root" FROM DUAL;

                square root
                -----------
                 2.64575131

22. TAN
       : TAN은 인수 n의 사인(tangent)값을 반환한다.(라디안으로 표현되는 각도)

    - usage : TAN(n)

    - example : SELECT TAN(105 * 3.14159265359 / 180) AS "tangent of 105" FROM DUAL;

                tangent of 105
                --------------
                    -3.7320508

23. TANH 
       : TANH는 인수 n의 쌍곡선 탄젠트(hyperbolic tangent)을 반환한다.
         TANH(n)의 값은 (EXP(n) - EXP(-n))/(EXP(n) + EXP(-n)) 의 값과 같다.

    - usage : TANH(n)

    - example : SELECT TANH(.7) AS "Hyperbolic tangent of .7" FROM DUAL;

                Hyperbolic tangent of .7
                ------------------------
                              .604367777

* Character Functions Returning Character Values

1. CHR
     : CHR는 해당 DB의 character set 에서 파라미터로 주어지는 10진수 n에 대응하는 아스키코드를 반환한다.

   - usage : CHR(n)

   - example : SELECT CHR(68)||CHR(66) AS oracle FROM DUAL;

               ORACLE
               ------
                   DB

2. NCHR
     : NCHR은 유니코드 문자를 반환한다. 이 함수는 USING NCHAR_CS구문을 가진 CHR과 동등하다.

   - usage : NCHR(n)

   - example : SELECT NCHR(187) AS nchr, CHR(187 USING NCHAR_CS) AS chr FROM DUAL;

               NCHR    CHR
               ----    ---
               >       >

3. NLS_INITCAP 
     : NLS_INITCAP는 각 단어의 처음 문자를 대문자로, 나머지 문자를 소문자로 변환하여 char를 반환한다.
       단어는 공백 또는 영숫자 이외의 문자로 단락을 구분한다.

   - usage : NLS_INITCAP('c', 'nlsparam')

   - example : SELECT NLS_INITCAP ('database') AS initcap FROM DUAL;

                INITCAP
               --------
               Database

4. NLS_LOWER
     : NLS_LOWER는 모든 문자를 소문자로 변환하여 반환한다.
      'nlsparam'은 NLS_INITCAP함수와 같은 형태와 목적을 가질수 있다.

   - usage : NLS_LOWER('c', 'nlsparam')

   - example : SELECT NLS_LOWER('ORACLE''', 'NLS_SORT = XGerman') AS lowercase FROM DUAL;

               LOWERCASE
               ---------
                  oracle

5. NLSSORT
     : NLSSORT는 char 소트에 이용되는 bytes의 문자열을 반환한다.

   - usage : NLSSORT('c', 'nlsparam')

   - example : CREATE TABLE t1 (name VARCHAR2(15));
        INSERT INTO t1 VALUES ('Gaardiner');
        INSERT INTO t1 VALUES ('Gaberd');
        INSERT INTO t1 VALUES ('Gaasten');

               SELECT * FROM t1 ORDER BY name;

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

               SELECT * FROM t1 ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');

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

6. NLS_UPPER
     : NLS_UPPER는 입력 문자열을 모두 대문자로 변환한 문자열을 반환한다.

   - usage : NLS_UPPER('c', 'nlsparam')

   - example : SELECT NLS_UPPER ('grobe') AS uppercase FROM DUAL;

               UPPERCASE
               ---------
                   GROBE

7. SOUNDEX
     : SOUNDEX는 char의 음성 표현을 가지는 문자열을 반환한다.
       이 함수는 스펠링이 틀려도 발음이 유사한 영단어를 비교할수 있다.

   - usage : SOUNDEX('c')

   - example : SELECT last_name, first_name FROM employees
               WHERE SOUNDEX(last_name) = SOUNDEX('SMYTHE');

               LAST_NAME  FIRST_NAME
               ---------- ----------
                  Smith      Lindsey
                  Smith      William

8. TRANSLATE
     : TRANSLATE는 첫번째 문자열 expr에서 두번째 문자열(from_string) 각각의 문자를 순서대로
       세번째 문자열(to_string)의 대응되는 각각의 문자로 바꿔준다. 즉, 문자단위로 일대일 변환을 해준다.
        from_string은 to_string 보다 더 많은 문자를 가져야 하며, from_string 의 이 여분의 문자들
        (to_string에 대응되는 문자가 없는)이 expr에 있는 경우, 해당 문자를 삭제하는 기능을 한다.

   - usage : TRANSLATE(expr, from_string, to_string)

   - example : SELECT TRANSLATE ('SQL*Plus User''s Guide', ' */''', '___') AS translate FROM DUAL

               TRANSLATE              
               --------------------
               SQL_Plus_Users_Guide

9. ASCII
     : ASCII는 주어진 char의 첫 문자의 아스키 값에 상응하는 10진수값을 반환한다.

   - usage : ASCII('c')

   - example : SELECT ASCII('A') AS ascii FROM DUAL;
 
               ASCII
               -----
                  65

* Datetime Functions

1. CURRENT_DATE
     : CURRENT_DATE는 현재 세션의 날짜 정보를 Date 데이터 형으로 반환한다.

   - usage : CURRENT_DATE

   - example : ALTER SESSION SET TIME_ZONE = '-5:0';
        ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
               SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

               SESSIONTIMEZONE CURRENT_DATE
               --------------- --------------------
               -05:00          08-APR-2009 13:14:03

2. DBTIMEZONE
     : DBTIMEZONE는 데이터 베이스 time zone의 값을 반환한다.

   - usage : DBTIMEZONE

   - example : SELECT DBTIMEZONE FROM DUAL;

        DBTIME
               ------
               +00:00

3. EXTRACT
     : EXTRACT는 특정 날짜,시간 값이나 날짜 값 표현식으로부터 지정된 날짜 영역의 값을 추출하여 반환한다.

   - usage : EXTRACT(t FROM value_expr)

   - example : SELECT EXTRACT(YEAR FROM DATE '2009-03-07') FROM DUAL;

               EXTRACT(YEARFROMDATE'2009-03-07')
               ---------------------------------
                                            2009

4. SESSIONTIMEZONE
     : SESSIONTIMEZONE은 현재 세션의 시간대역(time zone)을 반환한다.

   - usage : SESSIONTIMEZONE

   - example : SELECT SESSIONTIMEZONE FROM DUAL;

               SESSION
               -------
               -08:00

5. SYS_EXTRACT_UTC
     : SYS_EXTRACT_UTC는 time zone offset 또는 time zone region name을 포함한 datetime값으로 부터
       협정 세계시간 UTC (Coordinated Universal Time?formerly Greenwich Mean Time)을 추출한다.

   - usage : SYS_EXTRACT_UTC(datetime)

   - example : SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -08:00') AS utc FROM DUAL;

               UTC
               ---------------------
               28-MAR-00 07.30.00 PM

* General Comparison Functions

1. GREATEST
     : GREATEST는 하나 이상의 인수중에서 가장 큰 값을 반환한다.

   - usage : GREATEST(expr)

   - example : SELECT GREATEST ('HARRY', 'HARRIOT', 'HAROLD') AS greatest FROM DUAL;
 
               GREATEST
               --------
               HARRY

2. LEAST
     : LEAST는 인수 EXPR의 리스트 중에서 가장 작은 값을 반환을 한다.

   - usage : LEAST(expr)

   - example : SELECT GREATEST ('HARRY', 'HARRIOT', 'HAROLD') AS least FROM DUAL;
 
               LEAST
               ------
               HAROLD

* Conversion Functions

1. ASCIISTR
    : ASCIISTR은 주어진 문자열의 아스키 문자열을 반환한다.       

   - usage : ASCIISTR('c')

   - example : SELECT ASCIISTR('ABACDE') AS asciistr FROM DUAL;

               ASCIISTR
               ----------
               AB\00C4CDE

2. BIN_TO_NUM
     : BIN_TO_NUM는 비트(2진수) 벡터를 동등한 수(10진수)로 변환한다.

   - usage : BIN_TO_NUM(expr)

   - example : SELECT BIN_TO_NUM(1,1,0) FROM DUAL;

               BIN_TO_NUM(1,1,0)
               -----------------
                               6

3. CHARTOROWID
     : CHARTOROWID는 CHAR, VARCHAR2, NCHAR, or NVARCHAR2 데이터형태의 값으로부터 ROWID형으로 변환한다.

   - usage : CHARTOROWID('c')

   - example : SELECT last_name FROM employees WHERE ROWID = CHARTOROWID('AAAFd1AAFAAAABSAA/');
 
               LAST_NAME
               -----------
               Greene

* Collection Functions

1. CARDINALITY
    : CARDINALITY는 중첩 테이블(nested table)에서 원소의 수를 반환한다.
                 반환된 형식은 number이고 만약 nested table이 공백이거나 null 집합인 경우 null을 반환한다.

   - usage : CARDINALITY(nested_table)

   - example : SELECT product_id, CARDINALITY(ad_textdocs_ntab) FROM print_media;

               PRODUCT_ID CARDINALITY(AD_TEXTDOCS_NTAB)
               ---------- -----------------------------
                     3060                             3
               2056                             3
               3106                             3
                 2268                             3

2. SET
     : SET은 중첩 테이블에서 중복을 배제하여 반환한다. 반환된 중첩 테이블은 입력된 중첩 테이블과 같은 형태이다.

   - usage : SET(nested_table)

   - example : SELECT customer_id, SET(cust_address_ntab) address FROM customers_demo;

               CUSTOMER_ID ADDRESS(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
               ----------- -------------------------------------------------------------------------------------------------
                    101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
                       102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'))
               103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
               104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
               105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))

* Hierarchical Function

1. SYS_CONNECT_BY_PATH
     : SYS_CONNECT_BY_PATH는 계층적 쿼리에서 유효하다. 이 함수는 루트로부터 node로 열의 값 Path를 반환환다.
                         column 값은 CONNECT BY 조건에 의해 반환되는 각행을 char에 의해 분리된다.

   - usage : SYS_CONNECT_BY_PATH(column, 'c')

   - example : SELECT LPAD(' ', 2*level-1)||SYS_CONNECT_BY_PATH(last_name, '/') AS path FROM employees
               START WITH last_name = 'Kochhar' CONNECT BY PRIOR employee_id = manager_id;

               PATH
               -------------------------------
                /Kochhar
                  /Kochhar/Greenberg
                    /Kochhar/Greenberg/Faviet
         /Kochhar/Greenberg/Chen
           /Kochhar/Greenberg/Sciarra
        /Kochhar/Greenberg/Urman
               /Kochhar/Greenberg/Popp
      /Kochhar/Whalen
                  /Kochhar/Mavris
                  /Kochhar/Baer
                  /Kochhar/Higgins
                    /Kochhar/Higgins/Gietz

* Encoding and Decoding Functions

1. DUMP
    : DUMP는 지정한 데이터의 위치와 길이 등을 지정한 형식으로 반환한다. return_fmt는 반환값의 서식을 지정한다.

   - usage : DUMP(expr, return_fmt, start_position, length)

   - example : SELECT DUMP('abc', 1016) AS dump FROM DUAL;

               DUMP                        
               ------------------------------------------
               Typ=96 Len=3 CharacterSet=WE8DEC: 61,62,63

2. VSIZE
    : VSIZE는 expr의 내부 표현에서 바이트의 수를 반환한다. 만약 expr이 Null이라면, 이 함수는 Null을 반환한다.

   - usage : VSIZE(expr)

   - example : SELECT last_name, VSIZE (last_name) AS bytes FROM employees WHERE department_id = 10;
 
               LAST_NAME            BYTES
               --------------- ----------
               Whalen                   6

* NULL-Related Functions

1. LNNVL
     : LNNVL은 조건식에 주어지는 항의 한쪽 혹은 양쪽에 NULL 값이 나타날 경우에, 조건식을 평가하는 간결한 방법을
       제공한다.
       LNNVL은L where 절에만 사용할 수 있다. LNNVL 함수는 조건식을 파라미터로 가지며 조건식이 FALSE나
       UNKNOWN 일 경우에 TRUE 를 반환하고, 조건식이 TRUE 일 경우에 FALSE 를 반환한다. LNNVL 함수는
       IS [NOT] NULL, AND, OR 조건식을 사용할수 없으나 잠재적으로 NULL 값이 나올 수 있는 상황에서 NULL 값을
       처리하기 위해 사용할 수 있다.  파라미터로 주어지는 조건식에는 AND, OR, BETWEEN 을 포함하는
       다중조건식(compound condition)은 올 수 없다.

   - usage : LNNVL(condition)

   - example : SELECT COUNT (*) FROM emp WHERE LNNVL (comm >= 500)

               COUNT(*)
               --------
                     12

* Environment and Identifier Functions

1. UID
    : UID는 세션 사용자의 유일한 식별하는 정수를 반환한다.(로그인 유저)

   - usage : UID

   - example : SELECT UID FROM DUAL;
                     
                      UID
               ----------
                        0

2. USER
    : USER는 VARCHAR2 형태를 가지는 세션 사용자(로그인 유저)의 이름을 반환한다.

   - usage : USER

   - example : SELECT USER FROM DUAL;
                     
               USER
               ----------
               SYS   

'Oracle > SQL' 카테고리의 다른 글

Merge  (0) 2009.11.09
분석함수(Anaylitic Function)  (0) 2009.11.09
Pairwise comparions VS Nonpairwise comparions  (0) 2009.11.07
[펌] Within a namespace, no two objects can have the same name.  (0) 2009.10.29
[펌]sqlplus column 관련 명령어  (0) 2009.10.28
Posted by 자수성가한 부자