在oracle sql中处理工作日日期的条件时的情况
我有oracle在oracle sql中处理工作日日期的条件时的情况,sql,oracle,date,view,Sql,Oracle,Date,View,我有oracle视图,我想在其中创建列SYSTEM\u INSERTED\u DATE,该列在表TUA\u PTI中不存在 在该SYSTEM\u INSERTED\u DATE列中,应设置该值,例如,如果当前日期是从星期二到星期五,则应显示上一日期,如果日期是星期一,则应显示从星期五开始的日期。可能吗 下面是视图中的DDL: Create View TES_RUS ( CLASS, TE_RPI ) AS Select CLASS, TE_RPI FROM
视图
,我想在其中创建列SYSTEM\u INSERTED\u DATE
,该列在表TUA\u PTI
中不存在
在该SYSTEM\u INSERTED\u DATE
列中,应设置该值,例如,如果当前日期是从星期二到星期五,则应显示上一日期,如果日期是星期一,则应显示从星期五开始的日期。可能吗
下面是视图中的DDL
:
Create View TES_RUS
(
CLASS,
TE_RPI
)
AS
Select
CLASS,
TE_RPI
FROM TUA_PTI
假设您的输入是一个日期(anydate),您必须根据该输入计算“上一个工作日”,其中“工作周”定义为周一到周五。还有其他的假设和要求:输入日期是一个工作日,它可能有一天中不同于午夜的时间;输出日期必须有一天的午夜时间,我们不需要考虑“假日”(下班的时候,比如独立日)。 您可以这样做:
select trunc(input_date) - case when to_char(input_date, 'Dy') = 'Mon'
then 3 else 1 end
from ...
这假设您的会话日期语言为英语(或美国或类似语言);如果不是,或者将来可能不是,或者对于其他用户,可以使用第三个参数to_char
:
to_char(input_date, 'Dy', 'nls_date_language=English')
视图只是一个SQL,在TUA_PTI中插入/更新数据时,它将无法捕获。如果无法修改表TUA_PTI,您可能必须编写触发器并在其他表中捕获该信息。1。使用Oracle SQL日期函数可以相对轻松地完成您所询问的内容。2.但是,日期将取决于运行查询的时间。这看起来不像是一个真正的插入日期。“插入日期”应该是存储在表中的固定日期,而不是视图中的计算日期(取决于运行查询的日期)。3.如果是星期六或星期天,您如何处理输入日期(无论是
sysdate
还是其他日期)?您如何处理“今天是星期五,昨天是星期四,但今天是假日,因此插入的日期必须是前一个星期三”?例如,现在我添加了新列“系统插入的日期”在select子句中提到SYSDATE-1,然后它正确地给出了从昨天开始的日期,默认为现在…但是我们在这里不使用oracle日期函数来识别当前日期吗?从这里我们可以说,例如,如果是星期一,那么应该显示从上周五开始的日期?例如,现在我添加了新的列“系统插入日期”在select子句中提到SYSDATE-1,那么它正确地给出了从昨天开始的日期,默认为现在…但是我们在这里不使用oracle日期函数来识别当前日期吗?从这里我们可以说,例如,如果是星期一,那么应该显示从上周五开始的日期?