오라클 TRUNC 함수..

sql 2014. 3. 17. 19:41

TRUNC 함수는..  

원하는 소수점 자리 만큼만 보여주거나..

또는 날짜의 경우도 잘라 버린다..


아래 SQL을 실행하면...

SELECT  SYSDATE

        , TRUNC(SYSDATE) 

        , TRUNC(SYSDATE,'YEAR')

        , TRUNC(SYSDATE,'MONTH')

        , TRUNC(SYSDATE,'DAY')

        , TRUNC(12543.345,2)

        , TRUNC(12543.345,1)

        , TRUNC(12543.345)

FROM DUAL


결과는..  

2014/03/17 19:38:40

2014/03/17 00:00:00

2014/01/01 00:00:00

2014/03/01 00:00:00

2014/03/16 00:00:00

12543.34

12543.3

12543



'sql' 카테고리의 다른 글

SQL문에서 like 검색.. escape  (0) 2014.03.19
매월 첫번주 월요일 구하기...  (0) 2014.03.17
oracle 분석함수 RANK, DENSE_RANK, ROW_NUMBER 차이..  (0) 2014.03.17
오라클 그룹 함수 over, partition by  (2) 2014.03.14
Join 유형  (0) 2014.03.07
Posted by 무세1
,

오라클에서는 Full Outer Join을 하기위해 

양쪽 컬럼에  컬럼(+) = 컬럼(+)를 쓰면 오류가 난다..

그러다 보니 ansi-sql 문법으로 Full Outer Join을 해야한다...

with T1 as (

select '1' A1, '12' A2 from dual

union all

select '3' A1, '32' A2 from dual

)

, T2 as (

select '1' A1, '11' B2 from dual

union all

select '2' A1, '21' B2 from dual

)

, T3 as (

select '2' A1, '11' C2 from dual

union all

select '4' A1, '21' C2 from dual

union all

select '1' A1, '24' C2 from dual

)

select coalesce(T1.A1,T2.A1,T3.A1) A1

        , T1.A2

        , T2.B2

        , T3.C2

from T1 full outer join T2 on T1.A1 = T2.A1

        full outer join T3 on T2.A1 = T3.A1  


결과값

A1 

A2

B2 

C2 

 1

12 

11 

24 

 2

NULL 

21 

11 

3

32 

NULL 

 NULL

 4

 NULL

 NULL

 21


with : 오라클은 with문을 이용하여 임시 테이블 같은 기능을 쓸수 있다.

Coalesce : 오라클의 NVL 대용으로 쓸수 있는 ansi-sql 함수다.


'sql' 카테고리의 다른 글

Join 유형  (0) 2014.03.07
row의 최소값, 최대값을 구하는 함수 GREATEST, LEAST  (0) 2014.03.07
오라클 connect by level 을 이용한 copy_t 테이블  (0) 2014.02.24
오라클 병렬 처리 힌트  (0) 2014.02.12
oracle instr() 함수  (0) 2014.02.12
Posted by 무세1
,

가끔 SQL작성시  예전에 쓰던 copy_t 테이블이 필요한 경우가 있다.

connect by level 을 이용해서 copy_t 테이블을 구현할 수 있다.


--최근 한달 일자별 임시 테이블

select  to_char(sysdate-level,'YYYYMMDD') cre_dd

from    dual

connect by level <= 31


'sql' 카테고리의 다른 글

row의 최소값, 최대값을 구하는 함수 GREATEST, LEAST  (0) 2014.03.07
Full outer join 다중조인해보기..  (0) 2014.03.06
오라클 병렬 처리 힌트  (0) 2014.02.12
oracle instr() 함수  (0) 2014.02.12
오라클 aes256 암호화  (0) 2014.01.28
Posted by 무세1
,

oracle instr() 함수

sql 2014. 2. 12. 18:47

스트링 값이 컬럼에 포함되어 있는 지 여부를 확인할 때 사용됨.

포함되는 위치값을 반환한다.


 INSTR(비교대상, 비교값, 비교시작위치, 검색된 결과 순번)


SELECT  INSTR('TEST FUNCTION', 'T',1,1) COL1 FROM DUAL; 

 

 COL1

 1



SELECT  INSTR('TEST FUNCTION', 'T',1,2) COL1 FROM DUAL; 

 

 COL1

 4




Posted by 무세1
,

오라클 aes256 암호화

sql 2014. 1. 28. 17:37

1. sys계정으로 암호화 하여 아래 권한을 준다.

grant execute on dbms_crypto to public;


2. 생성한다...  계정이 USER01 이면


CREATE OR REPLACE package body USER01.crypt_ase256

IS

    c_aeskey char(32) := '12345678901234567890123456789012';

    /**

     * encryption type이 아래와 같이 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5일 경우

     * output_string의 길이는 (int(input_string/16)+1)*32 이다.

     * 즉 input_string의 길이가 100일 경우 output_string의 길이는 224이다.

     *

     * key_string는 32자리로 고정되어야 한다.

     */


    function aes_encrypt (p_str in varchar2, p_keystr in varchar2 := null) return varchar2

    is

        output_string       VARCHAR2(4000);

        encrypted_raw       RAW(2000);

        key_bytes_raw       RAW (32) ;

        encryption_type     PLS_INTEGER :=

                            DBMS_CRYPTO.ENCRYPT_AES256

                            + DBMS_CRYPTO.CHAIN_CBC

                            + DBMS_CRYPTO.PAD_PKCS5;

    begin


        if (p_keystr is not null) and (lengthb(p_keystr) = 32) then

            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(p_keystr,'AL32UTF8','US7ASCII'));

        else

            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(c_aeskey,'AL32UTF8','US7ASCII'));

        end if ;


        encrypted_raw := DBMS_CRYPTO.ENCRYPT(SRC => UTL_I18N.STRING_TO_RAW(p_str, 'AL32UTF8'), TYP => encryption_type, KEY => key_bytes_raw);

        output_string := RAWTOHEX(encrypted_raw);


        return output_string;


    end aes_encrypt;


    /**

     * key_string는 32자리로 고정되어야 한다.

     */


    function aes_decrypt (p_str in varchar2, p_keystr in varchar2 := null) return varchar2

    is

        output_string       varchar2(2000);

        decrypted_raw       raw(2000);

        key_bytes_raw       raw (32);

        decryption_type     PLS_INTEGER :=

                                DBMS_CRYPTO.ENCRYPT_AES256

                                + DBMS_CRYPTO.CHAIN_CBC

                                + DBMS_CRYPTO.PAD_PKCS5;


    begin


        if (p_keystr is not null) and (lengthb(p_keystr) = 32) then

            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(p_keystr,'AL32UTF8','US7ASCII'));

        else

            key_bytes_raw := UTL_RAW.CAST_TO_RAW(CONVERT(c_aeskey,'AL32UTF8','US7ASCII'));

        end if;


        decrypted_raw := DBMS_CRYPTO.DECRYPT(SRC => HEXTORAW(p_str), TYP => decryption_type, KEY => key_bytes_raw);

        output_string := CONVERT(UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw),'US7ASCII','AL32UTF8');


        return output_string;


    end aes_decrypt;


end crypt_ase256;



3. 아래와 같이  사용

select crypt_ase256.aes_encrypt('asssss') from dual


'sql' 카테고리의 다른 글

오라클 병렬 처리 힌트  (0) 2014.02.12
oracle instr() 함수  (0) 2014.02.12
오라클 DB 전체 테이블 컬럼 조회..  (0) 2014.01.23
게시판 내용, 카운트 한번에 가져오는 SQL  (0) 2014.01.23
오라클 CLOB 컬럼 검색 방법  (0) 2014.01.23
Posted by 무세1
,