1
IF (To_Char(Date1,'Day') = 'Sunday' Or To_Char(Date2,'Day')  = 'Sunday') Then
SELECT columns ... FROM Table_Name;

ELSE
SELECT columns ... FROM Table_Name;

这是行不通的!

4

1 回答 1

2

它“不起作用”,因为您没有在格式模型中使用格式模型修饰符, fm。因为您没有使用格式模型修饰符,所以一周中的天数用空格填充到 9 个字符(最长的星期三的长度)。这反过来意味着您的相等性测试不正确。

为了修复它,请使用格式模型修饰符:

to_char(date1, 'fmDay')

您可以运行此查询来演示问题和解决方案:

with a_week as (
  select sysdate - level as dy
    from dual
 connect by level <= 7 )
select dy
     , to_char(dy, 'Day')
     , length(to_char(dy, 'Day'))
     , to_char(dy, 'fmDay')
     , length(to_char(dy, 'fmDay'))
  from a_week

看到这个 SQL Fiddle

说了我就不打扰了。为什么你需要输入一整天?请改用DY格式模型:

if to_char(date1,'DY') = 'SUN' or to_char(date2,'DY') = 'SUN' then
   ...

这始终是三个字符长。

关于调试的一个快速说明。如果您知道第一个 IF 语句没有正确执行,我将遵循以下阶段:

  1. 从 IF 语句中取出测试并将其放入 SELECT 中。检查您正在测试是否相等的两件事是相同的。
  2. 一旦你发现他们不是你就知道格式模型是问题所在。您可能不知道它被称为格式模型,但您在 TO_CHAR() 中使用它,因此您可以查看相关文档。
  3. TO_CHAR() 文档引导您格式化模型,您可以在其中找到格式模型修饰符。
于 2013-06-15T09:16:56.050 回答