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为星期五(甚至通过返回day而不是day变量来测试它并返回星期五。)但是,IF即使day变量确实是星期五,该语句也永远不会评估为真。任何想法如何解决这个问题。谢谢

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 回答