문제

아래 쿼리를 실행 중이며 빈 행을 반환합니다. 그러나 upd_time = '12 -mar-08 '인 테이블에 레코드가 있습니다. 왜 날짜를 반환하지 않는지 이해가 안 돼요 '12 -mar-08 '. 도와주세요 ??

bankrec.br_data에서 br_data.upd_time을 선택하여 br_data.upd_time = '12 -mar-08 ';

도움이 되었습니까?

해결책

현재 Oracle DB에 액세스 할 수는 없지만 To_char를 사용하는 것을 기억합니다.

노력하다

SELECT br_data.upd_time FROM BANKREC.br_data where to_char(br_data.upd_time, 'DD-MON-YY') = '12-MAR-08';

다른 팁

Upd_time은 정확히 12 마리의 08이 아닐 것입니다. 날짜 형식은 시간 구성 요소를 표시하지 않지만 아마도있을 수 있습니다 (Oracle의 날짜 데이터 유형에는 날짜 및 시간 구성 요소가 모두 포함될 수 있음).

이것을 시도하십시오 (시간 구성 요소를 볼 수 있습니다) :

alter session set nls_date_format='DD-MON-YY HH24:MI:SS';

SELECT br_data.upd_time FROM BANKREC.br_data
where br_data.upd_time >= to_date('12-MAR-08','DD-MON-YY')
and br_data.upd_time < to_date('13-MAR-08','DD-MON-YY');

당신이하는 경우에도 마찬가지입니다

SELECT br_data.upd_time FROM BANKREC.br_data 
       where trunc(br_data.upd_time) = '12-MAR-08';

Upd_time은 날짜가 아니라 타임 스탬프 일 수 있으므로 실제로 '12 -mar-08 05:30 '과 같은 것이 포함되어 있습니다. trunc() 타임 스탬프의 시간 부분을 제거합니다.

오류를 반환하지 않기 때문에 날짜를 올바르게 구문 분석한다고 가정하지만 그렇지 않으면 시도 할 수 있습니다. to_date('12-MAR-08','DD-MON-YY')

Oracle의 기능을 사용하여 문자열을 사용하여 날짜로 올바르게 변환해야합니다.

to_date('12-MAR-08', 'DD-MMM-YY')

그런 다음 Oracle "Date"데이터 유형에 가장 가까운 초에 시간 정보가 포함되어 있음을 고려해야합니다. 이것은 첫 번째 단계에서 건설 된 날짜가 실제로 3 월 12 일 자정이라는 것을 의미합니다. 따라서 upd_time이 자정까지 잘린지 확인해야합니다.

trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY')

전체 쿼리가됩니다

SELECT br_data.upd_time 
FROM BANKREC.br_data 
WHERE trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY');

이 고양이를 피부하는 다른 방법이 있습니다 (updtime 열을 적절한 숯불로 옮길 수 있습니다. to_char(upd_time, 'DD-MMM-YY')), 그러나 일반적으로 데이터베이스에서 찾을 수있는 것과 유사한 데이터를 조회를 위해 인덱스를 사용할 가능성이 높아짐에 따라 필요한 데이터를 만드는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top