【问题标题】:How to remove weekend non-working hours in PL/SQL?如何删除 PL/SQL 中的周末非工作时间?
【发布时间】:2013-06-15 07:25:48
【问题描述】:
IF (To_Char(Date1,'Day') = 'Sunday' Or To_Char(Date2,'Day')  = 'Sunday') Then
SELECT columns ... FROM Table_Name;

ELSE
SELECT columns ... FROM Table_Name;

这不行!

【问题讨论】:

    标签: datetime plsql oracle-sqldeveloper plsqldeveloper


    【解决方案1】:

    它“不起作用”,因为您没有在格式模型中使用 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() 文档将引导您找到格式模型,您可以在其中找到格式模型修饰符。

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      相关资源
      最近更新 更多