개발자의 끄적끄적

[sql / oracle] SQL 활용 - 테이블 생성, 날짜 계산 ,CASE WHEN [펌] 본문

개발/sql

[sql / oracle] SQL 활용 - 테이블 생성, 날짜 계산 ,CASE WHEN [펌]

효벨 2020. 10. 7. 01:00
728x90
반응형

[sql / oracle]  SQL 활용 - 테이블 생성, 날짜 계산 ,CASE WHEN [펌]

 

기본적인 구조는 아래와 같습니다 !

CREATE TABLE (원하는 테이블명)
(
  (원하는 칼럼명)  (원하는데이터타입)(길이) (NULL값 여부) 
 CONSTRAINT xpk테이블명_table PRIMARY KEY(키 지정할 칼럼명)
);

 

테이블 생성

위 형식으로 예시를 하나 만들어보면

CREATE TABLE customer
(
   cus_id      varchar2(5) NOT NULL  /*고객번호*/
  ,sex        char(1)                 /*성별*/
  ,age          varchar2(20)               /*연령대*/
,CONSTRAINT xpkdemo_table PRIMARY KEY(cus_id)
);

참고로 /*~ */ 는 주석처리되어 쿼리에 아무런 영향도 미치지 않습니다 ~

CONSTRAINT xpkdemo_table PRIMARY KEY(cus_id) 
↑ 이 부분은 내가 만들 테이블에서 값을 식별할 수 있는 식별자를 정하는 것입니다.
고객 번호라는 것은 중복없이 고객 한명에게 부여되는 유일한 값이므로 값을 식별할 수 있습니다.

 

TO_DATE를 활용한 날짜계산

다음은 문자열 형태로 저장된 날짜를 계산하는 방법입니다.
날짜 값이 '20150102'와 같이 문자형으로 들어가있으면
TO_DATE 함수를 이용해서 날짜로 바꿔줄 수 있습니다.

EX)
문자형으로 저장된 날짜 컬럼이 pdate,라고 지정해놨다고 하고,
TO_DATE(pdate, 'YYYY MM DD') 이렇게 하면 20150102가 날짜 데이터로 바뀌게 됩니다.

그러면 pdate에는 문자형으로 날짜 여러개가 저장되어 있는데 최소값과 최대값을 빼보겠습니다.
 max(to_date(pdate,'YYYY MM DD'))- min(to_date(pdate,'YYYY MM DD')) <- 함수의 대소문자 구분은 상관없습니다 ~

 

CASE WHEN (프로그래밍 if~else)

마지막으로 프로그래밍에서 쓰는 if~else문과 비슷한 case when입니다.

기본 구조는
case when 조건 then 참 실행 else 거짓 실행 end
조건이 맞으면 참 실행 아니면 거짓 실행 쉽죠?

EX) 우리 회사 고객의 구매 일수를 알고 싶은데 어떻게 하지?

구매 일수라는 것은 실제 구매가 일어난 날짜만을 계산해야 합니다.
구매한적이 없는 고객까지 계산하면 안되겠죠? 

※ 전체 쿼리가 아닌 쿼리 중 case when 부분만 가져온 것입니다.
count(distinct(case when pdate is not null then pdate else null end))

해석 : 구매날짜가 NULL값 즉, 비어 있지 않으면 pdate를 출력해라, 아니면(비어있으면) null 값을 출력해라
          동일한 날짜는 중복을 제거(distinct)하고 count한다.

case when절  정말 유용하게 쓸 수 있을 것 같습니다 !!

 

 

출처 : blog.naver.com/PostView.nhn?blogId=wkdtndud76&logNo=220915829338&parentCategoryNo=&categoryNo=11&viewDate=&isShowPopularPosts=true&from=search

반응형
Comments