如何删除PL / SQL中的周末非工作时间?

时间:2013-06-15 07:25:48

标签: datetime plsql oracle-sqldeveloper plsqldeveloper

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

ELSE
SELECT columns ... FROM Table_Name;

这不起作用!

1 个答案:

答案 0 :(得分:2)

由于您未在格式模型中使用format model modifierfm,因此“无效”。因为您没有使用格式模型修饰符,所以星期几用右边填充空格为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

请参阅this 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()文档可引导您格式化模型,您可以在其中找到格式模型修饰符。