반응형

숫자만 들어있는 컬럼이 있는데, 정렬을 해 보니, 

1
11
12
13
2
21

이런씩으로 정렬되는 경우를 본 적이 있을 것이다. 
컬럼의 정의가 INT가 아닌 VARCHAR로 되어 있어서 그런 경우가 있다.
업무상 이렇게 데이터베이스를 설계할 경우도 있으니 잘잘못은 패스~ 하고

이렇경우 어떻게 정렬하면 재대로 표현될까.. 하니...
MySQL에는 (CAST)연산자라는게 있다.

cast type의 종류는 
binary
char
signed (부호있는 숫자)
date
datetime
time
unsigned (부호없는 숫자)
등이 있다.

이용 방법은 

정렬할 때에는 
select * from customers order by cast(customers_id as unsigned);

문자를 숫자로 변환할 때에는
select cast('1' as unsigned) as test
숫자를 문자로 변환할 때에는
select cast(2 as char(1)) as test

이렇게 이용하면 된다.

 

반응형
반응형

웹페이지에 문자열을 출력할때
상황에 따라 대문자로 혹은.. 소문자로 출력해야 하는 경우가 있다.
단, 알파벳만 대상이 되니.. 주의해야 한다.

PHP는 각 상황에 대한 함수를 제공한다. 단, 알파벳만 대상이 되니.. 주의해야 한다.

string strtolower($str) - 대문자를 소문자로 변환하여 반환한다.

string strtoupper ($str) - 소문자를 대문대로 변환하여 반환한다.

string mb_strtoupper ( string $str [, string $encoding = mb_internal_encoding() ] 
소문자를 대문대로 변환하여 반환한다.
예) mb_strtoupper('john은 외국인이다.', 'UTF-8');

string mb_strtolower ( string $str [, string $encoding = mb_internal_encoding() ] )
문자를 문대로 변환하여 반환한다.
예) mb_strtolower('john은 외국인이다.', 'UTF-8');

이둘은 인코딩을 지정할 수 있다. 지정하지 않으면 내부 문자인코딩을 이용한다.

정확하게는 모르겠는데... 
mb_XXX 이것은 2바이트 문자가 있을때 글자깨짐 방지를 위해 인코딩을 지정할 수 있게 해 둔 함수가 아닌가 생각된다. 
일본어 사이트 개발할 때 문자열 조작할때 글짜깨짐 형상이 발생하여 
mb_XXX 이런 함수로 대체해서 작업한 경험이 있어서... (완전 개인적 생각임,) 

string mb_convert_case ( string $str , int $mode = MB_CASE_UPPER [, string $encoding = mb_internal_encoding() ] )
이 함수도 위의 함수와 비슷한데 
$mode값에 따라 대문자에서 소문자로 소문자에서 대문자로 변환이 가능하다.
(인코딩 지정도 가능하다)

MB_CASE_UPPER(소문자를 대문자로) 
MB_CASE_LOWER(대문자롤 소문자로)
MB_CASE_TITLE(단어별 첫번째 문자를 대문자로) 


그외에 함수로는 

string ucfirst($str) - 문자열의 첫 문자를 대문자로 변환하여 반환 한다. 
string cfirst($str) - 문자열의 첫 문자를 소문자로 변환하여 반환 한다. 
string ucwords($str) - 문자열 중의 단어별 첫 문자를 대문자로 변환하여 반환한다.

등이 있다.

 

반응형
반응형

년도와 월이 주어졌을 경우, 해당 월의 달력을 생성해주는 쿼리를 만들어 보자.
쿼리는 아래와 같다. (2000년 01월이 주어졌을 경우)


SELECT   MIN (DECODE (TO_CHAR (days, 'd'), 1, TO_CHAR (days, 'fmdd'))) 일,
         MIN (DECODE (TO_CHAR (days, 'd'), 2, TO_CHAR (days, 'fmdd'))) 월,
         MIN (DECODE (TO_CHAR (days, 'd'), 3, TO_CHAR (days, 'fmdd'))) 화,
         MIN (DECODE (TO_CHAR (days, 'd'), 4, TO_CHAR (days, 'fmdd'))) 수,
         MIN (DECODE (TO_CHAR (days, 'd'), 5, TO_CHAR (days, 'fmdd'))) 목,
         MIN (DECODE (TO_CHAR (days, 'd'), 6, TO_CHAR (days, 'fmdd'))) 금,
         MIN (DECODE (TO_CHAR (days, 'd'), 7, TO_CHAR (days, 'fmdd'))) 토
    FROM (SELECT     base_mon + LEVEL - 1 days,
                         (  TRUNC (base_mon + LEVEL - 1, 'd')
                          - TRUNC (TRUNC (base_mon + LEVEL - 1, 'y'), 'd')
                         ) / 7 + 1 week_grp
                FROM (SELECT TO_DATE ('200001', 'yyyymm') base_mon
                        FROM DUAL)
          CONNECT BY base_mon + LEVEL - 1 <= LAST_DAY (base_mon))
GROUP BY week_grp
ORDER BY week_grp 



connect by level 절을 사용하지 못하는 버전일 경우에는, 아래와 같이 dict 테이블을 이용한다.
아래 예는 위의 쿼리 와는 다르게 오늘로부터 몇달 후인지를 나타내는 변수 :n에 따라 달력을 생성한다.
(:n=-1 일 경우 지난달, 0은 이번달, 1은 다음달, 2는 다다음달,...)


SELECT   MIN (DECODE (TO_CHAR (days, 'd'), 1, TO_CHAR (days, 'fmdd'))) 일,
         MIN (DECODE (TO_CHAR (days, 'd'), 2, TO_CHAR (days, 'fmdd'))) 월,
         MIN (DECODE (TO_CHAR (days, 'd'), 3, TO_CHAR (days, 'fmdd'))) 화,
         MIN (DECODE (TO_CHAR (days, 'd'), 4, TO_CHAR (days, 'fmdd'))) 수,
         MIN (DECODE (TO_CHAR (days, 'd'), 5, TO_CHAR (days, 'fmdd'))) 목,
         MIN (DECODE (TO_CHAR (days, 'd'), 6, TO_CHAR (days, 'fmdd'))) 금,
         MIN (DECODE (TO_CHAR (days, 'd'), 7, TO_CHAR (days, 'fmdd'))) 토
    FROM (SELECT base_mon + ROWNUM - 1 days,
                     (  TRUNC (base_mon + ROWNUM - 1, 'd')
                      - TRUNC (TRUNC (base_mon + ROWNUM - 1, 'y'), 'd')
                     )
                   / 7
                 + 1 week_grp
            FROM (SELECT TRUNC (ADD_MONTHS (SYSDATE, :n), 'mm') base_mon
                    FROM DUAL), dict
           WHERE base_mon + ROWNUM - 1 <= LAST_DAY (base_mon))
GROUP BY week_grp
ORDER BY week_grp

반응형

'데이터베이스 > Oracle' 카테고리의 다른 글

Orange for Oracle 단축키  (0) 2019.01.28
[oracle]GREATEST, LEAST 함수  (0) 2018.06.22
[오라클]그룹별 순번 만들기  (0) 2013.06.21
[오라클]유저생성  (0) 2013.04.09
행을 열로 표시하기  (0) 2011.10.14
반응형


SELECT

MASTER_CODE

,CODE

,VALUE

,RANK() OVER(PARTITION BY MASTER_CODE ORDER BY MASTER_CODE, CODE)

from NAME_MT

ORDER BY MASTER_CODE, CODE ;



반응형

'데이터베이스 > Oracle' 카테고리의 다른 글

Orange for Oracle 단축키  (0) 2019.01.28
[oracle]GREATEST, LEAST 함수  (0) 2018.06.22
Oracle 달력 쿼리  (0) 2016.10.13
[오라클]유저생성  (0) 2013.04.09
행을 열로 표시하기  (0) 2011.10.14
반응형

oracle DB 를 설치하고, instance 를 만들어서 start 를 했다면 이제 유저를 생성할 차례..
(oracle 11g 에서 테스트 해봄)

1. tablespace 를 생성
SQL> create tablespace 테이블스페이스_네임 datafile '데이타파일위치(절대경로)' size 용량;
SQL> create tablespace test_ts01 datafile '/data1/oradata/test_ts01_data01.dbf' size 1024M;

-> 인덱스용 테이블 스페이스도 미리 생성하자
SQL> create tablespace test_ti01 datafile '/data1/oradata/test_ti01_indx01.dbf' size 1024M;

2. 유저 생성
SQL> create user 아이디 identified by 패스워드 default tablespace 테이블스페이스_네임 temporary tablespace temp;
SQL> create user test identified by testpassword default tablespace test_ts01 temporary tablespace temp;

3. 권한 부여
SQL> grant connect, resource to 아이디;
SQL> grant connect, resource to test;

ps. 참고로 각 내용들의 조회 방법

유저 조회
select username, default_tablespace, temporary_tablespace, account_status, profile from dba_users order by 1;

테이블스페이스 상태 조회
select tablespace_name, status, contents, extent_management, segment_space_management from dba_tablespaces order by 1;

데이터파일 상태 조회
select tablespace_name, bytes, file_name from dba_data_files order by 1;

사용자에게 할당된 시스템 권한 조회
select grantee, privilege from dba_sys_privs where lower(grantee) in ('아이디') order by 1;

권한의 묶음인 롤 확인
select grantee, granted_role from dba_role_privs where lower(grantee) in ('아이디') order by 1;

반응형

'데이터베이스 > Oracle' 카테고리의 다른 글

Orange for Oracle 단축키  (0) 2019.01.28
[oracle]GREATEST, LEAST 함수  (0) 2018.06.22
Oracle 달력 쿼리  (0) 2016.10.13
[오라클]그룹별 순번 만들기  (0) 2013.06.21
행을 열로 표시하기  (0) 2011.10.14
반응형


// 달 증가

select add_months(sysdate, -1), sysdate from dual;

반응형

'데이터베이스 > DB2' 카테고리의 다른 글

DB2 관련 툴  (0) 2012.12.31
[DB2]에러코드  (0) 2012.12.24
[DB2] Backup & Restore  (0) 2012.12.21
DB2_COMPATIBILITY_VECTOR AND DB2 EXPRESS C  (0) 2012.11.30
[DB2] CONNECT BY LEVEL (ORACLE -> DB2)  (0) 2011.08.04
반응형


DB2 관련 툴


Toad for DB2 (상용)

Orange for DB2 (상용)

XpertMon (상용)

SQLGate for DB2 (상용, 무료버전 있음)

SqlDbx Personal (상용, 무료버전 있음)


개인적으로 Orange for DB2 가 가볍고 편리하나, 상용이라....


상용툴이 없다면,, SQLGate 또는 SqlDbx 추천!!

반응형

'데이터베이스 > DB2' 카테고리의 다른 글

DB2 날짜 계산  (0) 2013.01.10
[DB2]에러코드  (0) 2012.12.24
[DB2] Backup & Restore  (0) 2012.12.21
DB2_COMPATIBILITY_VECTOR AND DB2 EXPRESS C  (0) 2012.11.30
[DB2] CONNECT BY LEVEL (ORACLE -> DB2)  (0) 2011.08.04
반응형


반응형

'데이터베이스 > DB2' 카테고리의 다른 글

DB2 날짜 계산  (0) 2013.01.10
DB2 관련 툴  (0) 2012.12.31
[DB2] Backup & Restore  (0) 2012.12.21
DB2_COMPATIBILITY_VECTOR AND DB2 EXPRESS C  (0) 2012.11.30
[DB2] CONNECT BY LEVEL (ORACLE -> DB2)  (0) 2011.08.04
반응형



backup


db2 backup db DB_NAME to D:\BK



restore


db2 restore db DB_NAME from d:\BK taken at backup_time(yyyymmddhhmmss)

반응형

'데이터베이스 > DB2' 카테고리의 다른 글

DB2 관련 툴  (0) 2012.12.31
[DB2]에러코드  (0) 2012.12.24
DB2_COMPATIBILITY_VECTOR AND DB2 EXPRESS C  (0) 2012.11.30
[DB2] CONNECT BY LEVEL (ORACLE -> DB2)  (0) 2011.08.04
[DB2] Oracle 호환모드로 바꾸기  (0) 2011.08.04
반응형

http://lifewithdatabases.tumblr.com/post/724631321/db2-compatibility-vector

반응형

'데이터베이스 > DB2' 카테고리의 다른 글

DB2 관련 툴  (0) 2012.12.31
[DB2]에러코드  (0) 2012.12.24
[DB2] Backup & Restore  (0) 2012.12.21
[DB2] CONNECT BY LEVEL (ORACLE -> DB2)  (0) 2011.08.04
[DB2] Oracle 호환모드로 바꾸기  (0) 2011.08.04

+ Recent posts