2018년 2월 27일 화요일

Oracle SQL - ISO Week of Months

개발 환경
OS : Windows 8 64 Bit
Platform : Web (http://sqlfiddle.com)
Project :
DBMS : ORACLE
My mental state : not good
The reliability of this article : High

오라클 날짜 관련 정리하다가 월별 차주에 대해서 새로 알게 된게 있어서 포스팅!
일단 여기 참조!

전에 포스팅한 글에서는 달력의 월별 차주가 7일간격으로 1주, 2주, 3주... 이렇게 계산됩니다.
뭐 물론 이것도 좋지만 보통 월욜부터 일욜을 한주로 보니깐 오라클 7일 기준은 조금 애매한 부분이 있음을 인정할 수 밖에 없죠!!!
그래서 또 공부!

이것저것 찾아보니 이런 방법이 있었습니다.
아래에 SQL, 빨간색 부분

SELECT DEEP_1.*,
       CASE
       WHEN C_DAY_NUM = 1 THEN 'SUN'
       WHEN C_DAY_NUM = 2 THEN 'MON'
       WHEN C_DAY_NUM = 3 THEN 'TUE'
       WHEN C_DAY_NUM = 4 THEN 'WED'
       WHEN C_DAY_NUM = 5 THEN 'THU'
       WHEN C_DAY_NUM = 6 THEN 'FRI'
       WHEN C_DAY_NUM = 7 THEN 'SAT'
       ELSE
         'WHAR?'
       END C_NAME,
       CEIL (
       (TO_DATE(C_DATE, 'YYYYMMDD') - 
       TRUNC(TRUNC(TO_DATE(DEEP_1.C_DATE, 'YYYYMMDD'), 'MM'), 'IW') + 1)
       / 7) C_WEEK_ISO
  FROM ( SELECT TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYYMMDD') AS C_DATE,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYY-MM-DD') AS C_P_DATE,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYY') AS C_YEAR,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'MM') AS C_MON,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'DD') AS C_DAY,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'D') AS C_DAY_NUM,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'WW') AS C_WEEK_NUM,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'W') AS C_WEEK_NUM_OF_MON
           FROM DUAL
CONNECT BY LEVEL <= (TO_DATE('20181231', 'YYYYMMDD') -
                     TO_DATE('20180101', 'YYYYMMDD') +1)) DEEP_1;

이런 식으로 구현이 되더라구요 ;)
TRUNC 함수에 대해서 한번 더 알게 된 기회였습니다.
TRUNC 과 궁금하시다면!!!

그들은 김치를 먹나요 ?
Do they eat kimchi ?


2018년 2월 26일 월요일

Oracle SQL - Calendar(Date Row)

개발 환경
OS : Windows 8 64 Bit
Platform : Web (http://sqlfiddle.com)
Project :
DBMS : ORACLE
My mental state : not good
The reliability of this article : High

간단하게 오라클로 날짜 Row 생성하기
해당 쿼리는 주로 표준용 날짜 데이터를 가져오기 위해 만든 것입니다.

그럼 우선 DB SQL Test : <Where are U?>
로 들어가서,
좌측 상단에 실행할 DB 툴을 oracle 로 선택.

 왼쪽 스키마 생성은 그냥 아무거나. 본인은
create table log_table
( message varchar2(200)
)
입력 후 Build Schema 버튼 클릭.
오른쪽 쿼리란에 입력. 쿼리는
SELECT DEEP_1.*,
       CASE
       WHEN C_DAY_NUM = 1 THEN 'SUN'
       WHEN C_DAY_NUM = 2 THEN 'MON'
       WHEN C_DAY_NUM = 3 THEN 'TUE'
       WHEN C_DAY_NUM = 4 THEN 'WED'
       WHEN C_DAY_NUM = 5 THEN 'THU'
       WHEN C_DAY_NUM = 6 THEN 'FRI'
       WHEN C_DAY_NUM = 7 THEN 'SAT'
       ELSE
         'WHAR?'
       END C_NAME
  FROM ( SELECT TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYYMMDD') AS C_DATE,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYY-MM-DD') AS C_P_DATE,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYY') AS C_YEAR,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'MM') AS C_MON,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'DD') AS C_DAY,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'D') AS C_DAY_NUM,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'WW') AS C_WEEK_NUM,
                TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'W') AS C_WEEK_NUM_OF_MON
           FROM DUAL
CONNECT BY LEVEL <= (TO_DATE('20181231', 'YYYYMMDD') -
                     TO_DATE('20180101', 'YYYYMMDD') +1)) DEEP_1; 

하단 결과가 짠!!!

그럼 오늘도 힘내고 좋은 하루!!!

Fear can hold you prisoner, hope can set you free.
두려움은 너를 포로로 묶어두지만, 희망은 너를 자유롭게 할 것이다. - 쇼생크탈출

대항해시대 조선 랭작

숙련도 획득 방법 선박 건조, 선박 강화, 전용함 추가시 숙련도 획득 모두 동일한 공식 적용 획득 숙련도 공식 기본 획득 숙련도 ≒ int{건조일수 × 현재랭크 × (0.525)} 이벤트 & 아이템 사용...