지정된 월에 대한 날짜가 부적합합니다.... 0 7 493

by 하나둘셋 [Oracle 기초] [2021.04.13 11:18:38]


안녕하세요
입력한 basc_dt의 달의 마지막 날짜를 구해 1개월 더한 후 str_dt보다 작은거나 같은값을 추출하고싶은데 
3월달이나 다른달은 추출이 잘되는데 basc_dt에 20210201을 넣으면 
지정된 월에 대한 날짜가 부적합합니다라고 에러가 뜹니다... 2월이 문제인것같은데 어떻게해야할까요?ㅠㅠ 

근데 to_char(add_months(basc_dt,1),'YYYYMMDD')  여기까지는 20210331로 값이 잘 나옵니다
where proc_basc_dt <=str_dt 이 쿼리를 추가하면 저 에러가 나옵니다....

select *from (
select 
to_char(add_months(basc_dt,1),'YYYYMMDD') proc_basc_dt, str_dt 
from(
select 
to_char(lastday(:basc_dt),'YYYYMMDD') basc_dt, str_dt
from aa)
)
where proc_basc_dt <=str_dt

 

by 마농 [2021.04.13 11:31:55]

Date 가 필요한 곳엔 Date 를 Char 가 필요한 곳엔 Char 를
Data Type 별로 맞게 사용해야 합니다.
날짜 변환함수 시용시엔 날짜포멧을 정확하게 지정해 줘야 합니다.
1. LASTDAY 는 입력 인자로 날짜가 와야 하는데 문자가 옴.
- 변경전 : LASTDAY(:basc_dt)
- 변경후 : LASTDAY(TO_DATE(:basc_dt, 'yyyymmdd))
2. ADD_MONTHS 는 입력 인자로 날짜가 와야 하는데 문자가 옴.
- 변경전 : ADD_MONTHS(basc_dt,1)
- 변경후 : ADD_MONTHS(TO_DATE(basc_dt, 'yyyymmdd), 1)
3. str_dt 의 데이터 타입이 뭔가요?
- Date 타입 인데? 문자인 proc_basc_dt 와 비교하는건 아닌지?


by 마농 [2021.04.13 12:39:46]

다시 보니 사용 함수가 좀 이상하네요?
lastday 맞나요? 오라클 함수는 last_day 인데요?
lastday 라는 별도 사용자 함수를 만들어 놓은 건 아닌지?
아니면 단순 오타인지?


by 하나둘셋 [2021.04.13 13:19:55]

데이터 타입을 날짜로 바꿔서 해도 똑같은 에러가 나네요.....

last_day입니다 오타났어요 ㅠㅠ

그리고 str_dt는 문자입니다


by 마농 [2021.04.13 13:22:47]

오타 난 걸로 봐서
지금 올려주신 쿼리가 실제 오류가 발생한 쿼리가 맞는지 의심이 드네요.
실제로 오류가 발생한 쿼리를 그대로 올려주세요.


by 하나둘셋 [2021.04.13 13:44:32]

select 

select *from 
( select to_char(add_months(to_date(basc_dt,'YYYYMMDD'),1),'YYYYMMDD') proc_basc_bt, str_dt 
from( 
select case when basc_dd ='31' then to_char(last_day(to_date(:basc_dt,'YYYYMMDD')), 'YYYYMMDD') else substr(:basc_dt,1,6) ₩₩ basc_dd end basc_dt,
str_dt, basc_dd 
from A))
where proc_basc_dt <= str_dt

정확히는 이 쿼리입니다....



basc_dd가 31이면 그달의 마지막날을 구하고 아니면 입력한 basc_dt의 년월까지 자른후 basc_dd를 붙이고 
이 값의 1달 더한값인 proc_basc_bt을 str_dt값보다 작거나 같은 값을 구하려고했습니다.... 
:basc_dt, str_dt, basc_dt 모두 문자입니다

 


by 마농 [2021.04.13 14:02:25]

₩₩ 이 부분이 뭐죠? || 의 오타인 듯 한데?
6자리만 잘라서 dd 를 붙이면 이게 실제 날짜가 아닌 오류 정보가 될 수 있습니다.
오류 예시 : 20210229, 20210230 등등
로직을 잘못 구성하신 듯 하네요.


by 하나둘셋 [2021.04.13 14:15:32]

죄송합니다 제가 핸드폰이라  || 이게 없어서 ₩₩로 대체했네요 ㅠㅠ

로직을 다시 생각해보겠습니다 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입