database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41249 게시물 읽기
No. 41249
날짜쿼리 질문요
작성자
울산(youwin333)
작성일
2016-09-26 18:50
조회수
6,488

( SELECT CASE WHEN CL_DT IS NULL THEN

CASE WHEN ( SELECT TO_NUMBER(TO_CHAR(TO_DATE( '2015' /**P*/, 'YYYY'),'YYYY')) FROM DUAL ) -- 입력년도

>= ( SELECT TO_NUMBER(TO_CHAR( SYSDATE ,'YYYY')) FROM DUAL ) THEN

( SELECT TO_NUMBER(TO_CHAR( SYSDATE, 'MM')) MON FROM DUAL )

ELSE 12 END

ELSE

CASE WHEN ( SELECT TO_NUMBER(TO_CHAR(TO_DATE( '2015' /**P*/, 'YYYY'),'YYYY')) FROM DUAL ) -- 입력년도

= ( SELECT TO_NUMBER(TO_CHAR(TO_DATE( CL_DT, 'YYYYMMDD'),'YYYY' )) FROM DUAL ) THEN

( SELECT ROUND( MONTHS_BETWEEN(TO_DATE( CL_DT,'YYYYMMDD'), TO_DATE( '20160101', 'YYYYMMDD' )), 0 ) MON FROM dual )

ELSE 12 END

END

FROM DUAL ) MON

 

이거 해석좀 부탁드려요 ㅠㅠ

이 글에 대한 댓글이 총 3건 있습니다.

1. ct_dt 가 null 일 경우 

- 입력년도가 현재 년도 보다 크거나 같으면 현재 월을 반환, 작으면 12 를 반환

2. ct_dt 가 null 이 아닐 경우

- 입력년도와 cl_dt 의 년도가 같으면 2016년 1월 부터 cl_dt 사이의 월 차이를 반환,

   같지 않으면 12를 반환

 

 

열공중님이 2016-09-27 10:09에 작성한 댓글입니다.
이 댓글은 2016-09-27 10:09에 마지막으로 수정되었습니다. Edit

감사합니다 ㅠㅠㅠ

울산님이 2016-09-27 10:52에 작성한 댓글입니다. Edit

함수 사용할 때마다 "SELECT 함수 FROM dual" 했네요.
쓸데없이 복잡한 코드입니다. dual 없이 그냥 함수만 쓰면 됩니다.
빨간색 부분이 모두 필요 없습니다.


( SELECT CASE WHEN CL_DT IS NULL THEN
CASE WHEN ( SELECT TO_NUMBER(TO_CHAR(TO_DATE( '2015' /**P*/, 'YYYY'),'YYYY')) FROM DUAL ) -- 입력년도
>= ( SELECT TO_NUMBER(TO_CHAR( SYSDATE ,'YYYY')) FROM DUAL ) THEN
( SELECT TO_NUMBER(TO_CHAR( SYSDATE, 'MM')) MON FROM DUAL)
ELSE 12 END
ELSE
CASE WHEN ( SELECT TO_NUMBER(TO_CHAR(TO_DATE( '2015' /**P*/, 'YYYY'),'YYYY')) FROM DUAL ) -- 입력년도
= ( SELECT TO_NUMBER(TO_CHAR(TO_DATE( CL_DT, 'YYYYMMDD'),'YYYY' )) FROM DUAL ) THEN
( SELECT ROUND( MONTHS_BETWEEN(TO_DATE( CL_DT,'YYYYMMDD'), TO_DATE( '20160101', 'YYYYMMDD' )), 0 ) MON FROM DUAL)
ELSE 12 END
END
FROM DUAL ) MON
 

마농(manon94)님이 2016-09-27 11:16에 작성한 댓글입니다.
이 댓글은 2016-09-27 11:17에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
41252shell switch user 관련.. [1]
초보DBA
2016-09-30
6020
41251디비링크 연결 상태 체크 하는 방법 [1]
오락클
2016-09-27
6423
41250누적 차 [1]
김학빈
2016-09-26
6262
41249날짜쿼리 질문요 [3]
울산
2016-09-26
6488
41247DBA입문자 입니다 ㅠㅜ 제발 도와주세요
DBA초보자
2016-09-24
6649
41246시분초만 계산하여 범위를 구하기 [4]
김용완
2016-09-24
6783
4124409:00 ~ 15:30 형식으로 사이 시간을 구하는 방법 [3]
김씨
2016-09-22
6310
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다