http://www.sqler.com/270809
안녕하세요?
지난 번에 이어 두 번째 Function 비교 시간입니다.
또다른 9가지 나갑니다. ^^.
11. 문자열 변환
구분 |
MSSQL |
Oracle |
함수 |
REPLACE |
REPLACE |
용례 |
SELECT REPLACE('1234567','123','321') |
SELECT REPLACE('1234567','123','321') FROM DUAL |
결과 |
3214567 |
3214567 |
è MSSQL의 STUFF라는 함수가 있는데요. 이것은 엑셀의 REPLACE와 같습니다.
SELECT STUFF('13579',2,3,'222')
--> 결과
12229 |
12. 음절의 첫 글자만 대문자로 변환(Pascal Case)
구분 |
MSSQL |
Oracle |
함수 |
지원하지 않음 |
INITCAP |
용례 |
- |
SELECT INITCAP('we are the world') FROM DUAL; |
결과 |
- |
We Are The World |
11. 문자열에서 특정 문자만 쏙쏙 골라서 다른 문자로 변환, 정확하게 이야기하면 지정한 문자와 맞으면 특정 문자로 처리함, 또는 특정 지정문자가 없는 경우 해당 문자를 삭제함.
구분 |
MSSQL |
Oracle |
함수 |
지원하지 않음 |
TRANSLATE |
용례 |
- |
SELECT TRANSLATE('NothingToUse','o','!') FROM DUAL;
SELECT TRANSLATE('BFG123', '12345BCDEFG', '123XXXXXXXX') FROM DUAL; |
결과 |
- |
N!thingT!Use
XXX123 |
è 아래 SAMPLE을 참조하세요.
create table translate_test
(
mem_id varchar(20)
)
;
INSERT INTO translate_test (mem_id) values ('ABCD1234');
INSERT INTO translate_test (mem_id) values ('abcdef');
INSERT INTO translate_test (mem_id) values ('585472');
COMMIT;
select mem_id, translate(mem_id, '0123456789' || mem_id, '0123456789')
from translate_test;
-- 결과
ABCD1234 1234
abcdef
585472 585472 |
14. 나열한 인수 중 가장 큰 값 / 작은 값을 반환
구분 |
MSSQL |
Oracle |
함수 |
지원하지 않음 |
GREATEST / LEAST |
용례 |
- |
SELECT GREATEST('Z9', '나의','콜','A341', '999','123') FROM DUAL;
SELECT LEAST('Z9', '나의','콜','A341', '999','123') FROM DUAL; |
결과 |
- |
콜 / 123 |
è 비교하는 것은, 문자순위(A보다는 Z가 크다. 한글은 자모순서에 의함), 숫자순위(0보다는 9가 크가), 글자수단위(같은 문자로 시작하더라도 결국 글자수가 많은 것이 크다.)
15. 길이 가져오기, 또는 BYTE 단위 길이 가져오기
구분 |
MSSQL |
Oracle |
함수 |
LEN, DATALENGTH |
LENGTH |
용례 |
SELECT LEN('NothingToUse')
SELECT DATALENGTH('NothingToUse')
SELECT LEN('지원하지 않음')
SELECT DATALENGTH('지원하지 않음') |
SELECT LENGTH('NothingToUse') FROM DUAL;
SELECT LENGTH('지원하지 않음') FROM DUAL; |
결과 |
12 / 12 / 7 / 13 |
12 / 7 |
è 위에서 보시면 알겠지만, BYTE 단위로 길이를 확인하시려면 LEN 이 아닌 DATALENGTH 를 사용하셔야 합니다.
16. NULL 일 경우 대체값 표시.
구분 |
MSSQL |
Oracle |
함수 |
ISNULL |
NVL |
용례 |
SELECT ISNULL(QTY1,100) FROM A_TEMP |
SELECT NVL(QTY1,100) FROM A_TEMP; |
결과 |
100 (값이 NULL일 경우) |
100 (값이 NULL 일 경우) |
17. 숫자형을 문자형으로 변환
구분 |
MSSQL |
Oracle |
함수 |
STR, CONVERT, CAST |
TO_CHAR |
용례 |
SELECT 123 + 456
SELECT STR(123) + STR(456)
SELECT STR(123,3,0) + STR(456,3,0) |
SELECT TO_CHAR(123) || TO_CHAR(456) FROM DUAL;
SELECT 123 || 456 FROM DUAL; |
결과 |
579
123 456
123456 |
123456
123456 |
è MSSQL의 STR는 기본 자릿수가 10자리입니다.
è Oracle에서는 위에서 보시다시피 숫자형태를 Concat하더라도 자동적으로 문자로 나옵니다.
è 물론 MSSQL에서는 CONVERT나 CAST를 훨씬 더 많이 사용합니다.
SELECT CONVERT(VARCHAR(3),123) + CONVERT(VARCHAR(3),456)
--> 결과
123456 |
18. 문자형을 숫자형으로 변환
구분 |
MSSQL |
Oracle |
함수 |
CONVERT, CAST |
TO_NUMBER |
용례 |
SELECT '123' + '456'
SELECT CONVERT(INT,'123') + CONVERT(INT,'456')
SELECT CAST('123' AS INT) + CAST('456' AS INT) |
SELECT TO_NUMBER('123') + TO_NUMBER('456') FROM DUAL; |
결과 |
123456 / 579 / 579 |
579 |
19. 조건처리 구문
구분 |
MSSQL |
Oracle |
함수 |
CASE |
CASE (DECODE) |
è MSSQL CASE문은 여러 개의 조건 중 맞는 결과를 표시하는 것이고, Oracle의 DECODE는 참/거짓에 따라 결과를 표시합니다.
1) MSSQL CASE SAMPLE
-- 1. 테이블생 성
CREATE TABLE CASE_STUDY
(PKEY INT PRIMARY KEY,
DATA1 VARCHAR(20),
DATA2 VARCHAR(30)
);
-- 2. 자료 입력
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (1, 'A', '가');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (2, 'B', '나');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (3, 'C', '다');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (4, 'D', '라');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (5, 'E', '마');
-- 3. 데이터 출력
SELECT
PKEY,
CASE
WHEN PKEY = 1 THEN DATA1
WHEN PKEY = 2 THEN DATA2
WHEN PKEY = 3 THEN DATA1
ELSE DATA2
END AS DATA
FROM
CASE_STUDY
;
-- 4. 결과
1 A -- 1일 때 DATA1값
2 나 -- 2일 때 DATA2값
3 C -- 3일 때 DATA1값
4 라 -- 아니면 DATA2값
5 마 -- 아니면 DATA2값 |
2) 같은 자료를 Oracle DECODE를 사용할 경우
-- 1. 테이블생 성
CREATE TABLE CASE_STUDY
(
PKEY NUMBER(9),
DATA1 VARCHAR2(20),
DATA2 VARCHAR2(30)
);
-- 2. 자료 입력
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (1, 'A', '가');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (2, 'B', '나');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (3, 'C', '다');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (4, 'D', '라');
INSERT INTO CASE_STUDY (PKEY, DATA1, DATA2) VALUES (5, 'E', '마');
-- 3. 데이터 출력
SELECT
PKEY,
DECODE(PKEY, 1, DATA1,
DECODE(PKEY, 2, DATA2,
DECODE(PKEY, 3, DATA1,
DATA2)
)
) AS DATA
FROM
CASE_STUDY
-- 또는
SELECT
PKEY,
DECODE(PKEY, 1, DATA1,
2, DATA2,
3, DATA1,
DATA2) AS DATA
FROM
CASE_STUDY
-- 4. 결과
1 A -- 1일 때 DATA1값
2 나 -- 2일 때 DATA2값
3 C -- 3일 때 DATA1값
4 라 -- 아니면 DATA2값
5 마 -- 아니면 DATA2값
|
è Oracle 8.1.7부터는 MSSQL과 거의 동일한 CASE문을 제공합니다.
위 구문을 MSSQL 구문과 동일하게 하셔도 결과는 같습니다.
오늘은 여기까지이고요, 조만간 또 3탄 올리겠습니다.
이상 [쓸만한게없네]였습니다.