2017-01-25 2 views
0

Oracle DB에서 데이터를 검색하는 TOAD에서 SQL 쿼리를 만들려고합니다. 이전 작업 일의 모든 데이터를 일주일로 되 돌리는 것이 좋지만 토요일과 일요일은 제외해야합니다. 지금까지 아래 쿼리가 생성되었습니다. 이 형식에서는 "누락 된 키워드"라는 오류 메시지가 나타납니다. TOAD는 내 첫 "Between"연산자를 강조 표시합니다. 나는 거의 내가 거기 있다는 생각을 가지고있다. 누가 나를 올바른 방향으로 밀어 넣을 수 있는지.지난 주말 (주말 제외)

감사합니다.

Select orderkey, actualshipdate 
from orders 
Case to_char(sysdate, 'DAY') 
When 'MONDAY' 
then to_char(actualshipdate,'YYYYMMDD') between to_char(sysdate, 'YYYYMMDD') -11 and to_char(sysdate, 'YYYYMMDD')-3 
else to_char(actualshipdate,'YYYYMMDD') between to_char(sysdate, 'YYYYMMDD') -8 and to_char(sysdate, 'YYYYMMDD')-1 
end 
order by actualshipdate asc 

답변

0

당신의 묘사 (및 교체 날짜의 끔찍한 TO_CHAR)을 기반으로 :

select orderkey, actualshipdate 
from orders 
where 1=1 
and actualshipdate between trunc(sysdate) - 8 
        and trunc(sysdate)-(1/86400) -- midnight last night minus 1 second 
and to_char(actualshipdate, 'D') not in (6,7) -- 6: Sat, 7: Sun 
+0

감사합니다. 그건 속임수 야. 그러나 그것은 나에게 sysdate의 데이터도 보여줍니다. 제외시킬 수있는 방법이 있습니까? –

+0

이 쿼리가 작동하는지 의심 스럽습니다. 'to_char (actualshipdate, 'DAY')'는'SATURDAY '를 반환합니다. ''일요일''- 그들 중 누구도 일치하지 않을 것입니다, 그들은 빈 칸으로 채워져 있음을 주목하십시오. 또한 현재'NLS_DATE_LANGUAGE'가 ENGLISH 또는 유사하다고 가정합니다. –

+0

수정하십시오. JohnHC에서 제공 한 쿼리를 다시 확인했습니다. 토요일과 일요일의 데이터도 표시합니다. 나는 그것이 단지 6 개의 선이었던 것에 따라 그들을 간과했다. 주말을 제외 시키려면 어떻게해야합니까? –