캠핑과 개발

개인 프로젝트를 진행하면서 회원 정보 암호화를 하던 중에 알게된 mysql 함수입니다.
mysql에는 몇가지의 암호화가 제공이 되네요.
특정 암호화를 요청하지 않고 단순히 암호화만 요청할 경우 유용하게 사용할수 있을듯 합니다.

password('문자열')
SELECT PASSWORD('anaconda')
-->*75DCB4DD52B015D0F2B46F1AA906E66B008972E5
SELECT OLD_PASSWORD('anaconda')
-->0f9079872dca54d7

encode('문자열', 'key')
/* 암호화 */
SELECT ENCODE('abc', 'key');
-->��
/* 복호화 */
SELECT DECODE(ENCODE('abc', 'key'), 'key');
-->abc

encode 함수를 사용할 경우 data type는 CLOB로 해야 저장이 되네요..

'DEVELOPMENT > Database' 카테고리의 다른 글

Mysql 버전별 DB, USER 생성하기  (0) 2010.12.29
How to install Oracle Client 11g on Windows 7?  (0) 2010.09.27
[mysql] column add, modify, delete  (0) 2010.04.15
[mysql] 날짜 관련 함수  (0) 2010.03.18
[mysql] 문자열 함수[펌]  (0) 2010.03.16


DECODE는 일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL안으로 끌여들여 사용하기 위하여 만들어진 오라클함수이다. 따라서 일반 프로그래밍 언어의 IF문이 수행할 수 있는 기능을 포함하고 있다. select시의 decode 사용은 from 절만 빼고 어디에서나 사용할수 있다.
단. 비교 연산은 '='만 가능하다.


문법

DECODE(expr, search, result
       [, search, result ]...
       [, default ]      )

형식은 다음과 같이 사용하시면 됩니다.

DECODE(deptname, 'A', 1, 0)

-> deptname이 'A'와 같으면 1을 갖고 아니면 0을 갖게 됩니다.

또는 SUM함수로 합계를 내줄 수 있습니다.

SUM(DECODE(deptname, 'A', 1, 0)

-> deptname이 'A'와 같으면, 1을 누적하고,아니면 0을 갖게 됩니다.

2중 DECODE문도 허용됩니다. 다음을 보도록 하겠습니다.

DECODE(deptname, 'A', DECODE(name, 'KIM', 1), 0)

-> deptname이 'A'와 같고, name이 'KIM'이면, 1을 같고, 아니면, 0을 갖는다.

2중 DECODE문을 쓸때 두개의 DECODE문은 AND연산으로 수행됨을 명심하길 바랍니다.

기타 DECODE문과 오라클내에서 쓸 수 있는 여러가지 함수를 혼용해서 쓸수 있습니다.
예를들면, 문자열을 잘라주는 SUBSTR함수라든가, 위에서 사용한 SUM함수 등을 혼용해서 쓸 수 있습니다.
이렇게 원하는 sql문을 구사하기 위해서는 많은 실습과 경험과 그리고, 시행착오가 필요합니다.
DECODE문을 사용해서 조건에 맞는 항목에 대한 연산도 가능합니다.

다음을 보도록 하겠습니다.

문제) 사원테이블(PA06MR0)에서 영문성이 'KIM'으로 시작하는 사람과 'LEE'로 시작하는 사람의 합을 구하라. 단 입사년도 가 올해(1998)인 사람의 합을 구하라.

SELECT EMPNAME,
    SUM(DECODE(SUBSTR(EMPNAME,1,3),'KIM',1,0) 
    + DECODE(SUBSTR(EMPNAME,1,3),'LEE',1,0)),
FROM PA06MR0
WHERE SUBSTR(entondate, 1, 4) = '1998';
GROUP BY EMPNAME;


MS-SQL의 경우 CASE문과 같다.

CASE A
    WHEN 'apple' THEN 1  
    WHEN 'banana' THEN 0
    WHEN 'potato' THEN 2
END

 

'DEVELOPMENT > Database' 카테고리의 다른 글

oracle 시작과 종료  (0) 2009.05.07
Toad 단축키  (0) 2009.04.18
[ORACLE] 테이블 관련 정보 쿼리  (0) 2008.07.26
[MS-SQL] SELECT INTO  (0) 2008.05.20
[oracle] 오라클 중복제거 하면서 전체 값 가져오기  (0) 2008.03.27