테이블에 기간 필드 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')
감사합니다!
일반적으로 오늘 기준으로 유효한 것을 뽑으려면.
다음과 같이 합니다.
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
그런데. 원하는게 이게 아닌가요?
원본 대비 원하는 결과표를 보여주세요.
그에 대한 설명을 해주세요.
안녕하세요 말씀주신 조건으로 조회를 저도 했는데 그럼
위 테이블 중에서 아래와 같은 값만 조회가 됩니다.
20220601 20221004
20220626 20221004
dt_a ~ dt_b 사이이면 2022년 07월 건들도 조회가 되게 하는게 맞지 않나 싶어서요 체크로직인데 헛갈리네요
분명 7월 건들도 조회가 되는게 맞지 않나 싶어서요~ between이면 해당일 사이에 있는 것들은 7월것도 전부 조회되는게 맞는거 아닌가요?
7월은 아직 도래하지 않은 정보죠, 미래의 기간. 현재는 아직 유효하지 않음.
원하는 조건이 아직 끝나지 않은 것 찾기 인 듯 하네요.
AND TO_CHAR(sysdate, 'yyyymmdd') <= dt_b
아 네 끝나지 않은...
저도 이렇게 했었는데 이게 맞나 싶어서 between으로 사이에 값을 찾는게 맞을까부터 시작했는데 이렇게 말씀해 주시니 혼란이 잠재워 지네요 대단히 감사합니다.
항상 날짜 비교는 between or >=/<= 이 조합으로만 쓰다 보니 그랫던거 같습니다..
원하는게 뭔지 명확해야 합니다.
- 오늘 유효한 것 찾기 인지?
- 오늘 유효 + 미래 유효 찾기인지? (과거에 유효했던 것, 오늘 기준 이미 종료된 것 제외)
너무 감사드립니다