Oracle to MSSQL 쿼리 변환 시 검토할 점


1. Sub Query에 Alies는 필수


2. Sub Query 내에 ORDER BY 절을 사용할 수 없음


3. NVL 함수는 ISNULL로 대체


4. SUBSTR 함수는 SUBSTRING으로 대체


5. 문자열 연결 ||는 +로 대체


6. TRIM 함수는 LTRIM(RTRIM(FieldName))으로 대체


7. STDDEV 함수는 STDEV로 대체


8. CEIL 함수는 CEILING으로 대체

 

9. ROWNUM
    - ORDER BY 절 없이 WHERE 절에서 ROWNUM = 1 사용 시 SELECT 절에서 Top1으로 대체
     - ORDER BY  절 사용 시, SELECT 절에 ROWNUMBER() OVER (ORDER BY Field1...FieldN) 으로 대체


10. MOD 함수는 %로 대체
    예) ORACLE - MOD(10, 3)
          MSSQL  - 10%3


11. MINUS 함수는 EXCEPT로 대체


12. DECODE 문은 CASE...WHEN...THEN 문으로 대체


13. LENGTH 함수는 LEN으로 대체


14. ROUND 함수는 두 번째 자리수까지 써줘야 됨
    예) ORACLE - ROUND(Number) 가능.
          MSSQL  - ROUND(Number, 0)까지 써줘야 함


15. TRUNC(Number) 함수는 ROUND(Number, 0, 1)로 대체


16. 숫자 연산 시 MSSQL은 기본이 Integer 형이므로 소수점 이하를 표시하기 위해서는 DECIAML로 캐스팅 해줘야 함
    예) SELECT 10 / 3 => 3
          SELECT 10 / CASE(3 AS DECIMAL) => 3.333333333333333


17. MSSQL에서는 'YYYYMMDDHH24MISS' 형식의 날짜 포멧이 지원되지 않음


18. (+) 형태의 구문은 OUTER JOIN 형태로 대체
    예) ORACLE - SELECT * FROM Table A, Table B WHERE A.Field = B.Field(+)
          MSSQL  - SELECT * FROM Table A LEFT OUTER JOIN Table B ON A.Field = B.Field


19. ORDER BY 결과에 NULL 값의 위치가 다름
    예) ORACLE - ORDER BY Field 결과에 NULL 값이 가장 나중에 조회
          MSSQL  - ORDER BY Field 결과에 NULL 값이 가장 빠르게 조회


20. TO_CHAR 함수는 CONVERT로 변환
    예) ORACLE - TO_CHAR(Number)
          MSSQL  - CONVERT(VARCHAR, Number)

 

이외에도 차이점이 있을 것이나, 제가 변환하면서 필요한 내용을 정리한 것입니다.
도움이 되었으면 좋겠습니다.

 

 

Posted by 쭈니루
TAG ,

댓글을 달아 주세요

  1. 이번에 마이그레이션 작업하는데 도움이 많이 되었습니다 감사합니다 ㅎ

    2017.01.06 11:23 신고 [ ADDR : EDIT/ DEL : REPLY ]