오라클에선 아래와 같은 방식으로 구현을 하였습니다.
SELECT TO_CHAR(TRUNC(TO_DATE(LOGTIM, 'YYYYMMDDHH24MISS'), 'D') , 'YYYYMM\"0\"W' ) YYMMWK from tablea;
input
20100903180022
output
20100901
즉 해당 월의 몇번째 주인지 알아내는 쿼리를 db2에 알맞은 형태로 부탁드립니다.
소중한 답변 기다리고 있겠습니다. 감사합니다.
해당 쿼리가 맞게는 나오나요 ?
일단 oracle에서 테스트 했을때도 원하는 결과는 아니지 싶은데 말입니다.
완전 엉뚱한 값이 나오고 있는데...
어쟀거나 to_date 포멧에 "0"을 사용하지 못하네요.
나머지는 동일하게 사용하셔도 되지 싶습니다.
오라클에서의 날자포멧에서의 w가 1~7일을 1주로 보고 있는데... db2에서는 일~토를 1주로 보지 싶네요.
옵션 설정의 차이던가?
아무튼 제가 테스트 해봤을때는 그러네요
trunc 함수도 약간 다르게 동작하네요
'D'를 사용할 경우 해당주의 시작일자로 자르네요.
아 죄송합니다. 약간의 차이점이 있네요 output 처럼 출력을 하려면
'YYYYMM\"0\"W' 가 아니고 'YYYYMMW' 이런 방식으로 해야 겠지용 음..
select TO_CHAR(TRUNC(TO_DATE('20100903180022', 'YYYYMMDDHH24MISS'), 'D') , 'YYYYMMW' ) YYMMWK from dual;
위와 같은 결과를 원하고 있습니다.
관심 가져주셔서 감사합니다.
select TO_CHAR(TRUNC(TO_DATE('20100903180022', 'YYYYMMDDHH24MISS'), 'D') , 'YYYYMMW' ) YYMMWK from sysibm.sysdummy1;
예시하신 쿼리를 동일하게 테스트 하니 동일한 결과가 나오고 있습니다.
oracle : 2010085
db2 : 2010085
혹시 에러가 나거나 결과가 다르게 나오나요 ?
select TO_CHAR(TRUNC(TO_DATE('20100905180022', 'YYYYMMDDHH24MISS'), 'D') , 'YYYYMMW' ) YYMMWK from sysibm.sysdummy1;
을 테스트했을땐 또 다르게 나오네요.
oracle : 2010091
db2 : 2010092
이거 도움을 못 드리네요
TO_DATE 는 어떻게 사용하는거죠??
계속 에러가 나던데.. 두번째 인수가 어쩌구저쩌구 뜨더라구요.
SELECT (DAYOFWEEK(SUBSTR('20100901',1,4)||'-'||SUBSTR('20100901',5,2)||'-'||SUBSTR('20100901',7,2)) - 2 + INT(SUBSTR('20100925',7,2)))/7+1 FROM SYSIBM.SYSDUMMY1
그래서 이렇게 무식하게...
조회일자가 해당월의 몇번째 주에 속하는지 아래와 같이 만들어 봤습니다.
WEEK를 사용해서 해당 일자와 해당 일자가 들어 있는 월의 1일이 각각 몇주차에 속하는지를 찾아서
해당 일자의 주차에서 1일의 주차를 빼고 거기에 +1 해서 해당월의 몇주차..라고 표현 했습니다.
1) 시스템 날짜 사용 시
SELECT (CURRENT DATE) AS DD, (WEEK(DATE(CURRENT TIMESTAMP)) - WEEK(DATE(SUBSTR(CHAR(CURRENT DATE,ISO),1,7)||'-01')) +1) DW FROM SYSIBM.SYSDUMMY1
2) 받아온 날짜 사용 시
SELECT DATE(INSERT(INSERT('20100925',5,0,'-'),8,0,'-')) DD, (WEEK(DATE(INSERT(INSERT('20100930',5,0,'-'),8,0,'-'))) - WEEK(DATE(INSERT(INSERT('201009',5,0,'-'),8,0,'-01'))) +1) DW FROM SYSIBM.SYSDUMMY1
여러분들의 관심 대단히 감사합니다.
진정으로 많은 도움이 된거 같습니다. 다시 한번 감사드리고 건승하시길 바랍니다.