2012-11-07 28 views
6

Tôi đã cố gắng tìm ra vấn đề có thể là gì nhưng tôi không may mắn và không hiểu vấn đề này. Tôi có đoạn mã sau:Sự cố khi so sánh kết quả của to_char (myDate, 'DAY') với một chuỗi

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; 
/

các dateC được thiết lập đến thứ Sáu (thậm chí đã thử nó bằng cách quay day thay vì day biến và nó sẽ trả về thứ Sáu.) tuy nhiên, tuyên bố IF không bao giờ để đánh giá đúng mặc dù biến day thực sự là thứ Sáu Bất kỳ ý tưởng nào về cách giải quyết vấn đề này.Thanks

Trả lời

3

Nó là vì biến số day chứa giá trị đệm trống. Sử dụng trim chức năng để thoát khỏi không gian ở đầu và đuôi:

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

Và xin vui lòng sử dụng VARCHAR2 datatype cho các biến chuỗi. Không sử dụng VARCHAR.

+0

Cảm ơn bạn đã trả lời câu trả lời.Nó đã làm việc một cách hoàn hảo. – Tohmas

10

Nếu bạn muốn thực sự mạnh mẽ về điều này thì bạn nên ép cài đặt NLS sang tiếng Anh và áp dụng mô hình định dạng "điền chế độ" FM để cắt không gian đầu và cuối.

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

Cảm ơn, sẽ tận dụng điều đó. – Tohmas

Các vấn đề liên quan