oracle 날짜 조회조건 관련 0 6 1,199

by 개발고수가되기를 [2022.06.29 11:45:10]


테이블에 기간 필드 2개가 있습니다.

dt_a, dt_b

VARCHAR2(8) 형식이며, 해당 기간에 관련된 것만 당일 sysdate 기준으로 조회하여 제한을 두고 쿼리를 조회하는 형식으로 하려는데요.

data는 19건 아래와 같습니다.

 dt_a   dt_b
20220701 20221004
20220720 20231009
20220726 20231024
20220601 20221004
20220701 20221002
20220706 20221028
20220707 20221002
20220714 20221124
20220701 20221014
20220701 20221002
20220708 20221002
20220701 20221004
20220701 20221004
20220701 20221004
20220626 20221004
20220701 20221004
20220701 20221004
20220701 20221004
20220701 20221004

 

현재는 이렇게 되어 있습니다.

6월 건을 제외하고는 17건이 조회됩니다.

                              and dt_a between to_char(sysdate, 'yyyymmdd') and dt_b

문제는 여기서 부터인데 사용자가 dt_a를 20220601    dt_b 20221004 설정해 놓았을 경우 

오늘기준(20220629) ~ 20221004에 기간이기 때문에 20221004까지는 유효한 상태가 되어야 하는데 제외 된다는 점 입니다.

어떻게 설정해서 조회조건을 넣으면 좋을지 문의드립니다..

 

 

이렇게 조회하면 

                   AND to_char(sysdate, 'yyyymmdd') >= dt_a
                   AND to_char(sysdate, 'yyyymmdd') <= dt_b

20220601    20221004
20220626    20221004

이것만 조회

 

이렇게 조회하면 0건 조회

                  AND dt_a >= to_char(sysdate, 'yyyymmdd')
                   AND dt_b <= to_char(sysdate, 'yyyymmdd')

 

감사합니다!

by 마농 [2022.06.29 12:24:48]

일반적으로 오늘 기준으로 유효한 것을 뽑으려면.
다음과 같이 합니다.
   AND TO_CHAR(sysdate, 'yyyymmdd') BETWEEN dt_a AND dt_b
다음 조건도 동일한 조건입니다.
   AND TO_CHAR(sysdate, 'yyyymmdd') >= dt_a
   AND TO_CHAR(sysdate, 'yyyymmdd') <= dt_b
그런데. 원하는게 이게 아닌가요?
원본 대비 원하는 결과표를 보여주세요.
그에 대한 설명을 해주세요.


by 개발고수가되기를 [2022.06.29 12:30:12]

안녕하세요 말씀주신 조건으로 조회를 저도 했는데 그럼 

위 테이블 중에서 아래와 같은 값만 조회가 됩니다.

20220601    20221004
20220626    20221004

dt_a ~ dt_b 사이이면 2022년 07월 건들도 조회가 되게 하는게 맞지 않나 싶어서요 체크로직인데 헛갈리네요 

 

분명 7월 건들도 조회가 되는게 맞지 않나 싶어서요~ between이면 해당일 사이에 있는 것들은 7월것도 전부 조회되는게 맞는거 아닌가요?


by 마농 [2022.06.29 12:32:53]

7월은 아직 도래하지 않은 정보죠, 미래의 기간. 현재는 아직 유효하지 않음.
원하는 조건이 아직 끝나지 않은 것 찾기 인 듯 하네요.
   AND TO_CHAR(sysdate, 'yyyymmdd') <= dt_b


by 개발고수가되기를 [2022.06.29 12:38:24]

아 네 끝나지 않은...

저도 이렇게 했었는데 이게 맞나 싶어서 between으로 사이에 값을 찾는게 맞을까부터 시작했는데 이렇게 말씀해 주시니 혼란이 잠재워 지네요 대단히 감사합니다.

항상 날짜 비교는 between or >=/<= 이 조합으로만 쓰다 보니 그랫던거 같습니다..


by 마농 [2022.06.29 12:43:48]

원하는게 뭔지 명확해야 합니다.
- 오늘 유효한 것 찾기 인지?
- 오늘 유효 + 미래 유효 찾기인지? (과거에 유효했던 것, 오늘 기준 이미 종료된 것 제외)


by 개발고수가되기를 [2022.06.29 12:50:24]

너무 감사드립니다

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