2012-11-07 1 views
6

문제가 무엇인지 알아 내려고 노력했지만이 문제를 전혀 이해하지 못했습니다. 다음 코드를문자열 to_char (myDate, 'DAY')의 결과를 비교할 때의 문제

CREATE OR REPLACE FUNCTION ckeckDay(dateC in date) 
RETURN VARCHAR 
IS 
    day VARCHAR(15); 
    checkFriday VARCHAR(1); 
BEGIN 
    checkFriday := 'N'; 
    day := to_char(dateC, 'DAY'); 
    IF day = 'FRIDAY' THEN 
    checkFriday := 'Y'; 
    END IF; 
    RETURN day; 
END; 
/

dateC 금요일로 설정 (심지어 대신 변수 dayday를 반환하여 시험과 금요일을 반환합니다.)이 IF 문은 day 변수가 참으로 금요일에도 불구하고 참으로 평가하지 그러나 .이 이슈를 해결하는 방법에 대한 아이디어. 감사합니다.

답변

3

It day 변수에 공백으로 채워진 값이 포함되어 있기 때문입니다.

IF trim(day) = 'FRIDAY' THEN 
    checkFriday := 'Y'; 
END IF; 

을 문자열 변수에 대한 VARCHAR2 데이터 유형을 사용하십시오 : 선행 및 후행 공백을 없애 trim 기능을 사용합니다. VARCHAR을 사용하지 마십시오.

+0

답변 해 주셔서 감사합니다. 완벽하게 작동했습니다. 또한 팁 주셔서 감사합니다. – Tohmas

10

당신이 정말로 강력하다면 NLS 설정을 영어로 강제하고 앞뒤 공백을 트리밍하기 위해 "채우기 모드"형식 모델 FM을 적용해야합니다.

If To_Char(DateC,'fmDAY', 'nls_date_language=english') = 'FRIDAY' 
Then ... 
+0

고마워, 그것도 사용할거야. – Tohmas

관련 문제