8

問題が何であるかを見つけようとしていますが、運が悪く、この問題をまったく理解していません。次のコードがあります。

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返すことでテストし、金曜日を返します。)ただし、変数が実際に金曜日であっても、ステートメントはtrueに評価されません。この問題を回避する方法についてのアイデアはありません。ありがとうdaydayIFday

4

2 に答える 2

10

これについて本当に堅牢にしたい場合は、NLS 設定を英語に強制し、先頭と末尾のスペースをトリミングするために「フィル モード」形式モデル FM を適用する必要があります。

If To_Char(DateC,'fmDAY', 'nls_date_language=english') = 'FRIDAY'
Then ...
于 2012-11-07T12:53:31.157 に答える
5

これは、day変数に空白の埋め込み値が含まれているためです。関数を使用trimして、先頭と末尾のスペースを削除します。

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

VARCHAR2また、文字列変数にはデータ型を使用してください。使用しないでくださいVARCHAR

于 2012-11-07T12:41:26.493 に答える