728x90

1) 데이터의 정확성
   - 데이터를 일자만 저장할 것인가? 시분초밀리초까지 저장할 것인가?

2) 데이터의 범위
   - 1900년 이전이나 2079년 이후의 데이터도 저장할 것인가?

Datetime 데이터형식과 Char(8) 형식>

1) Datetime 데이터형식의 장점

 - 우선 Datetime 형식은 날짜시간을 저장하기 위해 특화된 데이터형식입니다.

 - 잘못된 날짜형식(예를 들어, 20070840 과 같은 데이터)는 입력할 수 없도록 자동 체크해 줍니다.

 - 또한, 다양한 날짜시간관련함수(dateadd, datediff, datepart, year, month, day 등)를 지원합니다.

 - 그러므로, 날짜시간형 데이터에는 DateTime을 사용하시는 것이 바람직합니다.

2) Char(8) 데이터형식을 선호하는 이유

 - datetime 형식은 정확하게 원하는 날짜를 선택하기 위해서는 정확한 데이터형식의 이해를 기반으로 쿼리를 작성해야 합니다. 예를 들어, 오늘날짜의 데이터를 조회하기 위해서는 where 날짜 between '2007-08-06 00:00:00.000' and '2007-08-06 23:59:59.997'로 명확하게 지정하거나, where 날짜 >= '2007-08-06' and 날짜 < '2007-08-07'로 지정해 주어야 합니다.

 - 날짜의 오른쪽 한계값을 '2007-08-06 23:59:59.999'로 잘못 지정하는 경우, '2007-08-07 00:00:00.000'로 반올림되게 되어 잘못된 결과가 반환되는 원인이 될 수 있습니다.

 - 그 외에도 데이터의 가공 등에 잘못된 오해로 인한 사용자 실수를 방지하기 위해 비교적 실수할 가능성이 적은 char(8) 형식을 선호하였습니다.

 - 하지만, 분명히 datetime 데이터형식을 이해하고 사용한다면, 위의 datetime의 장점과 같이, 동일한 저장공간으로도 더 정확한 데이터를 관리할 수 있고, 잘못된 데이터입력에 대한 유효성검사도 내장하고 있기 때문에, datetime 데이터형식을 사용하는 것이 바람직하다고 할 수 있습니다.

==> 결국, 날짜시간 데이터에는 datetime 데이터형식을 사용하는 것이 바람직하나,  비즈니스 요구사항에 따라 또는 필요에 따라 char(8)로 대체하여 사용할 수도 있습니다.

Datetime 데이터형과 Smalldatetime 데이터형)

 - Datetime은 8 바이트로 저장되고 smalldatetime은 4 바이트로 저장됩니다.

 - datetime 형식은 1753년 1월 1일에서 9999년 12월 31일까지 1/300초(3.33밀리초 또는 0.00333 초)의 정확성을 가진 날짜 및 시간 데이터입니다.

 - 1smalldatetime 형식은 900년 1월 1일에서 2079년 6월 6일까지 분 단위의 정확성을 가진 날짜 및 시간 데이터입니다. 29.998 초 이하의 근사치 분으로 버림되며 29.999 초 이상의 값은 근사치 분으로 반올림됩니다.

==> 그러므로 날짜의 데이터범위와 정확성을 근거로 datetime과 smalldatetime을 선택하시면 됩니다.

위의 내역에 관련해서는 우선 온라인 설명서의 각 데이터 형식의 설명 부분을 읽어보시면 도움이 되시리라 판단됩니다. 그외에도 inside SQL Server 2005 T-SQL Programming 1 장에 보면 참고하실만한 내용이 언급됩니다.

출처 : DBGuide

728x90
글쓴이 : 김홍선


pivot 쿼리란 row의 형태로 주어지는 데이타를 column의 형태로 보여주는 쿼리이다.
예를 들어, 아래와 같이 scott.emp 테이블이 주어졌다고 하면,

EMPNO   ENAME    DEPTNO
-----------------------
7369    SMITH    20
7499    ALLEN    30
7521    WARD     30
7566    JONES    20
7654    MARTIN   30
7698    BLAKE    30
7782    CLARK    10
7788    SCOTT    20
7839    KING     10
7844    TURNER   30
7876    ADAMS    20
7900    JAMES    30
7902    FORD     20
7934    MILLER   10


위 테이블에서, 한 row는 해당 deptno에 속하는 한 명의 사원(employee)을 나타낸다.
이 테이블에서 각 deptno에 속하는 사원의 수를 다음과 같이 출력하고자 한다면,


DEPTNO_10  DEPTNO_20  DEPTNO_30
-------------------------------
3          5          6


쿼리를 아래와 같이 만들어 준다.


SELECT COUNT (DECODE (deptno, 10, 1)) deptno_10,
       COUNT (DECODE (deptno, 20, 1)) deptno_20,
       COUNT (DECODE (deptno, 30, 1)) deptno_30
  FROM emp


pivot 쿼리의 특징 중의 하나는 select 절에 count(decode(...)), sum(decode(...)), max(decode(...)) 등의 함수를 많이 쓴다는 것이다.





예제 추가)

아래와 같이 deptno 별로 clerk, salesman, manager의 수가 나타나도록 쿼리를 만들어보자.
(여기서도 emp 테이블을 사용한다.)



    DEPTNO      CLERK   SALESMAN    MANAGER
---------- ---------- ---------- ----------
        10          1          0          1
        20          2          0          1
        30          1          4          1


쿼리는 아래와 같다.


SELECT   deptno
       , COUNT (DECODE (job, 'CLERK', 1)) clerk
       , COUNT (DECODE (job, 'SALESMAN', 1)) salesman
       , COUNT (DECODE (job, 'MANAGER', 1)) manager
    FROM emp
GROUP BY deptno





위에서 예를 든 것과 같이 row 형태의 데이타를 column 형태로 보여주는 쿼리를 row-to-column pivot 쿼리라고 하고, 그 반대로 column 형태를 row 형태로 보여주는 쿼리를 column-to-row pivot 쿼리라고 하자.


column-to-row pivot 쿼리의 예는 아래 페이지에서 확인할 수 있다.
- http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=77

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

퀴즈 문제  (0) 2008.04.29
DateTime ? Char(8) or (10)  (0) 2008.04.29
컬럼명 변경하기  (0) 2008.04.29
Table 변수 vs 임시 테이블 (Ver. 2000)  (0) 2008.04.29
SQL Server 2005의 XQuery 소개  (0) 2008.04.29
728x90

오라클


alter table 테이블명

rename column 원래그넘 to 바꿀넘;



MSSQL - Sybase 도 됨


sp_rename '테이블명.원래그넘','바꿀넘'

go

+ Recent posts