【问题标题】: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 modifier、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
见this SQL Fiddle
话虽如此,我不会打扰。为什么你需要输入一整天?请改用DY 格式模型:
if to_char(date1,'DY') = 'SUN' or to_char(date2,'DY') = 'SUN' then
...
这总是三个字符长。
关于调试的快速说明。如果您知道第一个 IF 语句未正确执行,我将遵循以下阶段:
- 从 IF 语句中取出测试并将其放入 SELECT 中。检查您正在测试是否相等的两件事是相同的。
- 一旦你发现他们不是你知道格式模型是问题所在。您可能不知道它被称为格式模型,但您在 TO_CHAR() 中使用它,因此您可以查看相关文档。
- TO_CHAR() 文档将引导您找到格式模型,您可以在其中找到格式模型修饰符。