안녕하세요 입력한 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
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 와 비교하는건 아닌지?
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 모두 문자입니다