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 40279 게시물 읽기
No. 40279
날짜 계산 관련 리터럴 에러..
작성자
디비하수
작성일
2013-10-08 20:15
조회수
7,687

SELECT  TO_CHAR(BASE_YMD,'mm') SET_MON
        ,CEIL((CURR_YMD - BASE_YMD + 1) / 7)  SET_WEEK
        ,TO_CHAR(TRUNC(MIN(CURR_YMD), 'IW')+0,'YYYY/MM/DD') AS  SET_WEEKSTART
        ,TO_CHAR(TRUNC(MIN(CURR_YMD), 'IW')+6,'YYYY/MM/DD') AS  SET_WEEKEND
 FROM (
        SELECT  CURR_YMD
               ,CASE WHEN CURR_YMD < NEXT_DAY(TRUNC(CURR_YMD,'mm')    - 1,2)
                     THEN NEXT_DAY(TRUNC(ADD_MONTHS(CURR_YMD,-1),'mm')- 1,2)
                     ELSE NEXT_DAY(TRUNC(           CURR_YMD,    'mm')- 1,2)
                     END BASE_YMD
          FROM (
            SELECT 
                CASE WHEN '20131007' IS NULL
                THEN
                    TO_DATE(TO_CHAR(SYSDATE,'YYYYMM'),'YYYYMM')+LEVEL-1
                ELSE
                    TO_DATE(SUBSTR('20131007',0,6),'yyyymm')+LEVEL-1
                END CURR_YMD
              FROM DUAL
           CONNECT BY LEVEL <= ADD_MONTHS(TO_DATE(SUBSTR('20131007',0,6),'yyyymm'),1)
                                        - TO_DATE(SUBSTR('20131007',0,6),'yyyymm')
               )
      )
GROUP BY  TO_CHAR(BASE_YMD,'mm'),CEIL((CURR_YMD - BASE_YMD + 1) / 7)
ORDER BY SET_MON ,SET_WEEK

=====================================================================

안녕하세요. 이곳에서 도움을 많이 받고 있는 유저 입니다.

이곳 정보를 통해 월/주차/주시작일/주마지막날 날짜를 구하는 쿼리를 구했습니다.

토드에서는 아무런 문제가 없는데..

웹서버(톰캣)에서는 .리터럴이 형식 문자열과 일치 하지 않음 이라면서 ORA-01861 에러를 뱉어냅니다..

왜 그런걸까요..이유를 모르겠네요...

아시는 분 도움 주시기 부탁드립니다..

특정 날짜를 받아서 그 날짜가 속한 주가 그 달의 몇주차 이고 그 주일은 몇일부터 몇일까지 라고 구하는건데..

매주는 (월요일~일요일) 로 구하고 있습니다..

도대체 이유가 멀까요..쿼리가 문제 인가요???

더 간결하게 구할수 있는지..도움 부탁드립니다..

감사합니다.

 

 

 

 

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

-- 웹 소스에 '20131007' 이라고 박혀 있진 않겠죠?
-- 변수에서 입력 받는 값이 정확한 포멧이 맞는지 확인해 보세요.
SELECT TO_CHAR(MIN(dt), 'mm') set_mon
     , (MAX(dt) - NEXT_DAY(TRUNC(MIN(dt), 'mm')-1, 2) + 1) / 7 set_week
     , TO_CHAR(MIN(dt), 'yyyy/mm/dd') set_weekstart
     , TO_CHAR(MAX(dt), 'yyyy/mm/dd') set_weekend
  FROM (
        SELECT TRUNC(TRUNC(dt, 'mm'), 'iw') + LEVEL - 1 dt
          FROM (
                SELECT NVL(TO_DATE(:v_ymd, 'yyyymmdd'), sysdate) dt
                  FROM dual
                )
         CONNECT BY LEVEL <= TRUNC(LAST_DAY(dt), 'iw') + 6
                           - TRUNC(TRUNC(dt, 'mm'), 'iw')
                           + 1
        )
 GROUP BY TRUNC(dt, 'iw')
 ORDER BY set_weekstart
;

마농(manon94)님이 2013-10-10 10:33에 작성한 댓글입니다.

 매번 감사합니다 마농님.

늘 많은 것을  배우네요 좋은 하루 되세요.

디비하수님이 2013-10-10 11:32에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40282쿼리 질문 [2]
권순민
2013-10-15
5723
40281두개 필드 명 합치기 가능한가요?? [1]
초보네
2013-10-15
6260
40280쿼리 결과가 왜 여러줄로 나오는지 도통 모르겠습니다.ㅠ_ㅠ.. [2]
김재익
2013-10-15
5743
40279날짜 계산 관련 리터럴 에러.. [2]
디비하수
2013-10-08
7687
40278Exp->Imp TableSpace 문제.
처음처럼
2013-10-08
5686
40277sql 질문입니다.
노브
2013-10-08
5747
40275오렌지 쿼리시 특정 테이블 쿼리하면 다운되는데요
바람
2013-10-04
5698
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다