어느 가을날의 전환점

DB|ORACLE vs MS-SQL 함수 비교 본문

Database

DB|ORACLE vs MS-SQL 함수 비교

어느가을빛 2010. 9. 8. 16:03

수식/수치 연산 함수

다음은 Oracle에서 지원하는 수식/수치 연산 함수와 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명OracleMicrosoft SQL Server
절대 값 ABS ABS
아크 코사인 ACOS ACOS
아크 사인 ASIN ASIN
n의 아크 탄젠트 ATAN ATAN
n과 m의 아크 탄젠트 ATAN2 ATN2
최소 정수 >= 값 CEIL CEILING
코사인 COS COS
쌍곡선 코사인 COSH COT
지수 값 EXP EXP
최대 정수 <= 값 FLOOR FLOOR
자연 로그 LN LOG
밑이 n인 로그 LOG(N) 해당 없음
상용 로그 LOG(10) LOG10
나머지 연산자 MOD USE MODULO (%) OPERATOR
거듭제곱 POWER POWER
난수 해당 없음 RAND
반올림 ROUND ROUND
숫자 부호 표시 SIGN SIGN
사인 SIN SIN
쌍곡선 사인 SINH 해당 없음
제곱근 SQRT SQRT
탄젠트 TAN TAN
쌍곡선 탄젠트 TANH 해당 없음
잘라내기 TRUNC 해당 없음
목록의 최대값 GREATEST 해당 없음
목록의 최소값 LEAST 해당 없음
NULL일 때 숫자 변환 NVL ISNULL

문자열 함수

다음은 Oracle에서 지원하는 문자열 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명OracleMicrosoft SQL Server
문자를 ASCII로 변환 ASCII ASCII
문자열 연결 CONCAT ( + )
ASCII를 문자로 변환 CHR CHAR
문자열의 문자 시작 위치 반환(왼쪽부터) INSTR CHARINDEX
소문자로 변환 LOWER LOWER
대문자로 변환 UPPER UPPER
문자열의 왼쪽 채우기 LPAD 해당 없음
선행 공백 제거 LTRIM LTRIM
후행 공백 제거 RTRIM RTRIM
문자열의 패턴 시작 위치 INSTR PATINDEX
문자열을 여러 번 반복 RPAD REPLICATE
문자열의 발음 기호 SOUNDEX SOUNDEX
반복되는 공백 문자열 RPAD SPACE
수치 데이터에서 변환된 문자 데이터 TO_CHAR STR
부분 문자열 SUBSTR SUBSTRING
문자 바꾸기 REPLACE STUFF
문자열에서 각 단어의 첫 문자를 대문자로 만들기 INITCAP 해당 없음
문자열 번역 TRANSLATE 해당 없음
문자열 길이 LENGTH DATELENGTH 또는 LEN
목록에서 가장 큰 문자열 GREATEST 해당 없음
목록에서 가장 작은 문자열 LEAST 해당 없음
NULL일 때 문자열 변환 NVL ISNULL

날짜 함수

다음은 Oracle에서 지원하는 날짜 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명OracleMicrosoft SQL Server
날짜 추가 (날짜 열의 +/- 값) 또는 ADD_MONTHS DATEADD
날짜 차이 (날짜 열의 +/- 값) 또는 MONTHS_BETWEEN DATEDIFF
현재 날짜와 시간 SYSDATE GETDATE()
달의 마지막 날 LAST_DAY 해당 없음
표준 시간대 변환 NEW_TIME 해당 없음
다음 날의 요일 NEXT_DAY 해당 없음
날짜의 문자열 표시 TO_CHAR DATENAME
날짜의 정수 표시 TO_NUMBER(TO_CHAR)) DATEPART
날짜 반올림 ROUND CONVERT
날짜 잘라내기 TRUNC CONVERT
문자열을 날짜로 TO_DATE CONVERT
NULL일 때 날짜 변환 NVL ISNULL

변환 함수

다음은 Oracle에서 지원하는 변환 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명OracleMicrosoft SQL Server
숫자를 문자로 TO_CHAR CONVERT
문자를 숫자로 TO_NUMBER CONVERT
날짜를 문자로 TO_CHAR CONVERT
문자를 날짜로 TO_DATE CONVERT
16진수를 이진수로 HEX_TO_RAW CONVERT
이진수를 16진수로 RAW_TO_HEX CONVERT

기타 행 수준 함수

다음은 Oracle에서 지원하는 기타 행 수준 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명OracleMicrosoft SQL Server
NULL이 아닌 첫째 식 반환 DECODE
COALESCE
현재 시퀀스 값 CURRVAL 해당 없음
다음 시퀀스 값 NEXTVAL 해당 없음
식1 = 식2일 때 NULL 반환 DECODE NULLIF
사용자의 로그인 ID 번호 UID SUSER_ID
사용자의 로그인 이름 USER SUSER_NAME
사용자의 데이터베이스 ID 번호 UID USER_ID
사용자의 데이터베이스 이름 USER USER_NAME
현재 사용자 CURRENT_USER CURRENT_USER
사용자 환경(감사 추적) USERENV 해당 없음
CONNECT BY 절의 수준 LEVEL 해당 없음

집계 함수

다음은 Oracle에서 지원하는 집계 함수 및 그에 상응하는 Microsoft SQL Server의 함수를 정리한 표입니다.

함수 설명OracleMicrosoft SQL Server
평균 AVG AVG
개수 COUNT COUNT
최대값 MAX MAX
최소값 MIN MIN
표준 편차 STDDEV STDEV 또는 STDEVP
합계 SUM SUM
분산 VARIANCE VAR 또는 VARP

조건부 테스트

Oracle DECODE 문과 Microsoft SQL Server CASE 식 모두 조건부 테스트를 수행합니다. 테스트_값의 값이 그 다음에 오는 어떤 식과 일치하면 관련 값이 반환됩니다. 일치하지 않으면 기본_값이 반환됩니다. 기본_값이 지정되어 있지 않고 일치하는 식이 없으면 DECODE와 CASE는 NULL을 반환합니다. 다음 표는 변환된 DECODE 명령 예제를 비롯하여 구문을 정리한 것입니다.

OracleMicrosoft SQL Server
DECODE (테스트_값,
식1, 값1
[[,식2, 값2] [U]]
[,기본_값]
)

CREATE VIEW STUDENT_ADMIN.STUDENT_GPA
(SSN, GPA)
AS SELECT SSN, ROUND(AVG
(DECODE(grade
,'A', 4
,'A+', 4.3
,'A-', 3.7
,'B', 3
,'B+', 3.3
,'B-', 2.7
,'C', 2
,'C+', 2.3
,'C-', 1.7
,'D', 1
,'D+', 1.3
,'D-', 0.7
,0)
),2)
FROM STUDENT_ADMIN.GRADE
GROUP BY SSN
CASE 입력_식
WHEN when_식 THEN 결과_식
[[WHEN when_식 THEN 결과_식] [...]]
[ELSE else_결과_식]
END

CREATE VIEW STUDENT_ADMIN.STUDENT_GPA
(SSN, GPA)
AS SELECT SSN, ROUND(AVG(CASE grade
WHEN 'A' THEN 4
WHEN 'A+' THEN 4.3
WHEN 'A-' THEN 3.7
WHEN 'B' THEN 3
WHEN 'B+' THEN 3.3
WHEN 'B-' THEN 2.7
WHEN 'C' THEN 2
WHEN 'C+' THEN 2.3
WHEN 'C-' THEN 1.7
WHEN 'D' THEN 1
WHEN 'D+' THEN 1.3
WHEN 'D-' THEN 0.7
ELSE 0
END),2)
FROM STUDENT_ADMIN.GRADE
GROUP BY SSN

CASE 식은 SELECT 문을 사용하여 부울 테스트를 수행할 수 있도록 지원합니다. DECODE 명령은 이를 허용하지 않습니다. CASE 식에 대한 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오.

값을 다른 데이터 형식으로 변환

Microsoft SQL Server의 CONVERT 및 CAST 함수는 다목적 변환 함수입니다. 이들은 비슷한 기능을 제공하며 식을 다른 데이터 형식으로 변환하고 다양한 특수 날짜 형식을 지원합니다.

  • CAST(식 AS 데이터_형식)
  • CONVERT (데이터 형식[(길이)], 식 [, 스타일])

CAST는 SQL-92 표준 함수입니다. 이들 함수는 Oracle의 TO_CHAR, TO_NUMBER, TO_DATE, HEXTORAW 및 RAWTOHEX 함수와 같은 작업을 수행합니다.

데이터 형식은 식을 변환할 모든 시스템 데이터 형식입니다. 사용자 정의 데이터 형식은 사용할 수 없습니다. 길이 매개 변수는 선택 사항이며 charvarcharbinary 및 varbinary 데이터 형식과 함께 사용됩니다. 허용되는 최대 길이는 8000입니다.

변환OracleMicrosoft SQL Server
문자를 숫자로 TO_NUMBER('10') CONVERT(numeric, '10')
숫자를 문자로 TO_CHAR(10) CONVERT(char, 10)
문자를 날짜로 TO_DATE('04-JUL-97')
TO_DATE('04-JUL-1997', 
'dd-mon-yyyy')
TO_DATE('July 4, 1997', 
'Month dd, yyyy')
CONVERT(datetime, '04-JUL-97')
CONVERT(datetime, '04-JUL-1997')
CONVERT(datetime, 'July 4, 1997')
날짜를 문자로 TO_CHAR(sysdate)
TO_CHAR(sysdate, 'dd mon yyyy')
TO_CHAR(sysdate, 'mm/dd/yyyy')
CONVERT(char, GETDATE())
CONVERT(char, GETDATE(), 106)
CONVERT(char, GETDATE(), 101)
16진수를 이진수로 HEXTORAW('1F') CONVERT(binary, '1F')
이진수를 16진수로 RAWTOHEX
(binary_column)
CONVERT(char이진_열)

문자열이 어떻게 날짜로 변환되는지 눈여겨 보십시오. Oracle의 기본 날짜 형식 모델은 "DD-MON-YY"입니다. 다른 형식을 사용하는 경우 적절한 날짜 형식 모델을 제공해야 합니다. CONVERT 함수는 형식 모델을 필요로 하지 않고 자동으로 표준 날짜 형식을 변환합니다.

날짜를 문자열로 변환하면 CONVERT 함수의 기본 출력은 "dd mon yyyy hh:mm:ss:mmm(24h)"이 됩니다. 숫자 스타일 코드는 출력 형식을 다른 종류의 데이터 형식 모델로 지정하는 데 사용됩니다. CONVERT 함수에 대한 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오.

아래 표는 Microsoft SQL Server 날짜의 기본 출력을 정리한 것입니다.

세기 사용 안함세기 사용표준출력
- 0 또는 100 (*) 기본값 mon dd yyyy hh:miAM(또는 PM)
1 101 미국 mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 영국/프랑스 dd/mm/yy
4 104 독일 dd.mm.yy
5 105 이탈리아 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 또는 109 (*) 기본 밀리초 mon dd yyyy hh:mi:ss:mmm(AM 또는 PM)
10 110 미국 mm-dd-yy
11 111 일본 yy/mm/dd
12 112 ISO yymmdd
- 13 또는 113 (*) 유럽 기본값 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)

사용자 정의 함수

Oracle PL/SQL 함수는 Oracle SQL 문에 사용할 수 있습니다. Microsoft SQL Server에서는 보통 다른 방법을 사용하여 이 기능을 얻을 수 있습니다.

아래 예제에서는 Oracle의 사용자 정의 함수 GET_SUM_MAJOR를 사용하여 학생들이 지불하는 수업료의 합계를 냅니다. SQL Server에서는 쿼리를 테이블로 사용하여 이렇게 할 수 있습니다.

OracleMicrosoft SQL Server
SELECT SSN, FNAME, LNAME, ) TUITION_PAID,
TUITION_PAID/
GET_SUM_MAJOR(MAJOR)
AS PERCENT_MAJOR
FROM STUDENT_ADMIN.STUDENT
SELECT SSN, FNAME, LNAME, TUITION_PAID, TUITION_PAID/SUM_MAJOR AS PERCENT_MAJOR
FROM STUDENT_ADMIN.STUDENT,
(SELECT MAJOR, SUM(TUITION_PAID) SUM_MAJOR
FROM STUDENT_ADMIN.STUDENT
GROUP BY MAJOR) SUM_STUDENT
WHERE STUDENT.MAJOR = SUM_STUDENT.MAJOR
CREATE OR REPLACE FUNCTION GET_SUM_MAJOR
(INMAJOR VARCHAR2) RETURN NUMBER
AS SUM_PAID NUMBER;
BEGIN
SELECT SUM(TUITION_PAID) INTO SUM_PAID
FROM STUDENT_ADMIN.STUDENT
WHERE MAJOR = INMAJOR;
RETURN(SUM_PAID);
END GET_SUM_MAJOR;
CREATE FUNCTION 구문이 필요하지 않습니다. CREATE PROCEDURE 구문을 사용하십시오.

Oracle과 Microsoft SQL Server의 비교 연산자는 거의 같습니다.

연산자OracleMicrosoft SQL Server
같음 (=) (=)
(>) (>)
작음 (<) (<)
크거나 같음 (>=) (>=)
작거나 같음 (<=) (<=)
같지 않음 (!=, <>, ^=) (!=, <>, ^=)
크지 않음, 작지 않음 해당 없음 !> , !<
집합의 구성원에 있음 IN IN
집합의 구성원에 없음 NOT IN NOT IN
집합에 있는 임의의 값 ANY, SOME ANY, SOME
집합에 있는
모든 값
!= ALL, <> ALL, < ALL,
> ALL, <= ALL, >= ALL, != SOME, <> SOME, 
< SOME, > SOME, 
<= SOME, >= SOME
!= ALL, <> ALL, < ALL,
> ALL, <= ALL, >= ALL, != SOME, <> SOME, 
< SOME, > SOME, 
<= SOME, >= SOME
패턴과 같음 LIKE LIKE
패턴과 같지 않음 NOT LIKE NOT LIKE
x와 y 사이의 값 BETWEEN x AND y BETWEEN x AND y
사이에 있지 않은 값 NOT BETWEEN NOT BETWEEN
값이 있음 EXISTS EXISTS
값이 없음 NOT EXISTS NOT EXISTS
값이 NULL이거나 NULL이 아님 IS NULL, IS NOT NULL 같습니다. 이전 버전과의 호환성을 위해 = NULL, 
!= NULL도 사용할 수 있지만 권장되지 않습니다.

패턴 일치

SQL Server의 LIKE 키워드는 Oracle은 지원하지 않는 유용한 와일드카드 검색 옵션을 제공합니다. SQL Server는 양쪽 RDBMS에 공통된 % 및 _ 와일드카드 문자를 지원함은 물론 [ ] 및 [^] 문자도 지원합니다.

[ ] 문자 집합은 지정한 범위에서 단일 문자를 검색하는 데 사용합니다. 예를 들어, 단일 문자 위치에서 a부터 f까지의 문자를 검색하는 경우 LIKE '[a-f]' 또는 LIKE '[abcdef]'처럼 지정할 수 있습니다. 아래 표를 통해 이러한 추가 와일드카드 문자의 유용함을 확인할 수 있습니다.

OracleMicrosoft SQL Server
SELECT * FROM STUDENT_ADMIN.STUDENT
WHERE LNAME LIKE 
'A%'
OR LNAME LIKE 'B%'
OR LNAME LIKE 'C%'
SELECT * FROM STUDENT_ADMIN.STUDENT
WHERE LNAME LIKE '[ABC]%'

[^] 와일드카드 문자 집합은 지정된 범위에 NOT 문자를 지정할 때 사용합니다. 예를 들어, a부터 f까지를 제외한 모든 문자가 허용될 때 LIKE '[^a - f]' 또는 LIKE '[^abcdef]'를 사용합니다.


# 출처

http://gunisilverlight.pe.kr/tag/MS%20SQL

0 Comments
댓글쓰기 폼