ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • oracle 과 mssql
    RDBMS/oracle 2010. 4. 20. 09:31



    오라클과 MS-SQL 함수, 쿼리 차이점

    쿼리 오라클9i MS-SQL2000
    값 대체 DECODE
    ex) DECODE(컬럼명, 'A', 'OK', 'B', 'NO', 컬럼명)
    CASE WHEN (오라클도 있음)
    ex) CASE WHEN 컬럼명 = 'A' THEN 'OK' WHEN 컬럼명 = 'B' THEN 'NO' ELSE 컬럼명 END
    문자열 자르기 SUBSTR
    ex) SUBSTR('ANSDDD', 1, 2) = 'AN'
    SUBSTRING
    ex) SUBSTRING('ANSDDD', 1,2) = 'AN'
    시스템시간 SYSDATE GETDATE()
    널값제어 NVL
    ex) NVL(컬럼명,0) => 컬럼값이 널이면 0으로 대체
    isNULL
    ex) isNULL(컬럼명,0) => 컬럼값이 널이면 0으로 대체
    형변환 TO_CHAR,TO_NUMBER
    ex) TO_CHAR(컬럼명) => 문자열 형태로 변환
    CONVERT
    ex) CONVERT(VARCHAR,컬럼명) => 문자열 형태로 변환
     
     

    차이점(MS-SQL 사용시 유의점)

    1. MS-SQL2000은 재귀순환쿼리 (ORACLE 의 CONNECT BY) 구문이 없습니다..
    MS-SQL2005에서는 지원된다고 합니다.
    따라서 재귀순환이 필요할 경우 함수를 만들어 사용해야 합니다.
    ex)
    -------------------------------------------------------------------
    CREATE FUNCTION fn_recursivemenu(@current as varchar(10))
    RETURNS @Hierarchy table (
     item_idx [int] IDENTITY (1, 1) NOT NULL , item varchar(20), up_item varchar(20), lvl int
    )
    -- Recusrsive메뉴 구현
    as
    begin
     DECLARE @lvl int
     DECLARE @stack table (item varchar(20), up_item varchar(20), lvl int)
     
        INSERT INTO @stack VALUES (@current, null, 1)
        SELECT @lvl = 1
        WHILE @lvl > 0
           BEGIN
              IF EXISTS (SELECT * FROM @stack WHERE lvl = @lvl)
                 BEGIN

                    SELECT @current = item
                    FROM @stack
                    WHERE lvl = @lvl

                    INSERT INTO @Hierarchy
                    SELECT menu_id, up_menu_id, menu_level FROM SYS_MENU
                    WHERE menu_id = @current

                    DELETE FROM @stack
                    WHERE lvl = @lvl
                       AND item = @current

                    INSERT @stack
                    SELECT menu_id, up_menu_id, @lvl + 1
                    FROM SYS_MENU
                    WHERE up_menu_id = @current
       ORDER BY menu_id desc

                    IF @@ROWCOUNT > 0
                       SELECT @lvl = @lvl + 1

                 END

              ELSE

                 SELECT @lvl = @lvl - 1
     
           END
     
     RETURN
    END
    ------------------------------------------------------------

    2. MS-SQL 은 하위쿼리 테이블 쿼리시 꼭 alias 명을 명시적으로
    부여해야 됩니다.
     ex) select * from (select * from table) --- 에러
          select * from (select * from table) a --- OK

    3. MS-SQL2000 Rownum 매기는법(편법)
      : MS-SQL에서 순차적인 번호를 매기기 위해서는 IDENTITY를 컬럼에 부여해주는

        방법밖에 없습니다.
        꼭 순차적인 번호를 부여해야 하는 경우라면 아래예문같은 방법을 사용해서 구현

        할 수는 있습니다만 그다지 추천할 방법은 아닙니다.

    ex)
    -------------------------
    SELECT
      ((SELECT count(*) FROM [테이블명] b where b.키컬럼 <= a.키컬럼)+200700000) AS ROWNUM
    FROM                                                    
      [테이블명] a
    ORDER BY 키컬럼
    -------------------------
    [결과]
    200700001
    200700002

    Math Functions
    Function Oracle SQL Server
    Absolute value ABS ABS
    Arc cosine ACOS ACOS
    Arc sine ASIN ASIN
    Arc tangent of n ATAN ATAN
    Arc tangent of n and m ATAN2 ATN2
    Smallest integer >= value CEIL CEILING
    Cosine COS COS
    Hyperbolic cosine COSH COT
    Exponential value EXP EXP
    Round down to nearest integer FLOOR FLOOR
    Natural logarithm LN LOG
    Logarithm, any base LOG(N) N/A
    Logarithm, base 10 LOG(10) LOG10
    Modulus (remainder) MOD USE MODULO (%) OPERATOR
    Power POWER POWER
    Random number N/A RAND
    Round ROUND ROUND
    Sign of number SIGN SIGN
    Sine SIN SIN
    Hyperbolic sine SINH N/A
    Square root SQRT SQRT
    Tangent TAN TAN
    Hyperbolic tangent TANH N/A
    Truncate TRUNC N/A
    Highest number in list GREATEST N/A
    Lowest number in list LEAST N/A
    Convert number if NULL NVL ISNULL

    String Functions
    Function Oracle SQL Server
    Convert character to ASCII ASCII ASCII
    String concatenate CONCAT (expression + expression)
    Convert ASCII to character CHR CHAR
    Return starting point of character in character string (from left) INSTR CHARINDEX
    Convert characters to lowercase LOWER LOWER
    Convert characters to uppercase UPPER UPPER
    Pad left side of character string LPAD N/A
    Remove leading blank spaces LTRIM LTRIM
    Remove trailing blank spaces RTRIM RTRIM
    Starting point of pattern in character string INSTR PATINDEX
    Repeat character string multiple times RPAD REPLICATE
    Phonetic representation of character string SOUNDEX SOUNDEX
    String of repeated spaces RPAD SPACE
    Character data converted from numeric data TO_CHAR STR
    Substring SUBSTR SUBSTRING
    Replace characters REPLACE STUFF
    Capitalize first letter of each word in string INITCAP N/A
    Translate character string TRANSLATE N/A
    Length of character string LENGTH DATALENGTH or LEN
    Greatest character string in list GREATEST N/A
    Least character string in list LEAST N/A
    Convert string if NULL NVL ISNULL


    Date Functions
    Function Oracle SQL Server
    Date addition (use +) DATEADD
    Date subtraction (use -) DATEDIFF
    Last day of month LAST_DAY N/A
    Time zone conversion NEW_TIME N/A
    First weekday after date NEXT_DAY N/A
    Convert date to string TO_CHAR DATENAME
    Convert date to number TO_NUMBER(TO_CHAR()) DATEPART
    Convert string to date TO_DATE CAST
    Get current date and time SYSDATE GETDATE()


    업데이트 구문 바꾸기

    mssql 의 update 이후 from 절은 오라클에서 먹히지 않는다.
    따라서 서브쿼리를 통한 수정이 불가피하다.

    ===================================
    어느 훌륭한 분이 긁기 가기 허가 신공을 발휘하사 많이 쓰는 것들이므로 업어....

    댓글

Designed by Tistory.