将to_char(myDate,'DAY')的结果与字符串进行比较时出现问题

Toh*_*mas 7 sql oracle plsql oracle11g

我一直试图找到问题所在,但我只是运气不好,根本不理解这个问题.我有以下代码:

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;
/
Run Code Online (Sandbox Code Playgroud)

dateC被设置为周五(甚至通过返回测试它day的替代day变量,它返回周五).然而,IF声明从不计算真实的,即使day变量确实Friday.Any想法如何去解决这个issue.Thanks

Dav*_*dge 10

如果你想对此非常强大,那么你应该将NLS设置强制为英语并应用"填充模式"格式模型FM来修剪前导和尾随空格.

If To_Char(DateC,'fmDAY', 'nls_date_language=english') = 'FRIDAY'
Then ...
Run Code Online (Sandbox Code Playgroud)


Nic*_*nov 5

这是因为day变量包含一个空白填充值。使用trim函数去除前导和尾随空格:

IF trim(day) = 'FRIDAY' THEN
  checkFriday := 'Y';
END IF;
Run Code Online (Sandbox Code Playgroud)

并且请VARCHAR2对字符串变量使用数据类型。不要使用VARCHAR.