Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORACLE查找过去7天内给定工作日的日期('DD-MON-YYYY')_Sql_Oracle - Fatal编程技术网

Sql ORACLE查找过去7天内给定工作日的日期('DD-MON-YYYY')

Sql ORACLE查找过去7天内给定工作日的日期('DD-MON-YYYY'),sql,oracle,Sql,Oracle,我正在尝试创建一个视图,用于比较具有“每日”、“星期三”、“星期二”等值的明细表。。以及另一个创建的表格报告,该报告每天更新,日期为2017年8月11日。基本上,如果计划表每天显示,那么报表创建的表记录值应该是sysdate current date等于的值。也就是说,我不知道如何找出最近的“星期三”或“星期二”等于什么。我确实找到了一个SQL server函数;然而,我不明白它是如何工作的,在Oracle中也找不到类似的工具。任何指导都将不胜感激 编辑:我创建了两个示例表: 附表: Repor

我正在尝试创建一个视图,用于比较具有“每日”、“星期三”、“星期二”等值的明细表。。以及另一个创建的表格报告,该报告每天更新,日期为2017年8月11日。基本上,如果计划表每天显示,那么报表创建的表记录值应该是sysdate current date等于的值。也就是说,我不知道如何找出最近的“星期三”或“星期二”等于什么。我确实找到了一个SQL server函数;然而,我不明白它是如何工作的,在Oracle中也找不到类似的工具。任何指导都将不胜感激

编辑:我创建了两个示例表:

附表:

Report_Name | Frequency
ORDERS_BY_DEPT | Daily
LOW_STOCK | Wednesday
INVENTORY_DISC | Thursday
以及报告表:

Report_Name | Create_Dt
INVENTORY_DISC | 3-Aug-2017
LOW_STOCK | 9-Aug-2017
ORDERS_BY_DEPT | 10-Aug-2017
因此,本质上,库存光盘报告是关闭的,因为它本应在每周四运行,但自上周四以来未更新,而部门订单报告是关闭的,因为它是每日报告,今天未运行

您可以通过以下方式找到:

例如,最后一个星期四是:

select  case 
        when to_char(sysdate, 'D') < 4 then sysdate - to_char(sysdate, 'D') - 7 + 4
        else sysdate - to_char(sysdate, 'D') + 4
        end
from    dual
您可以通过以下方式找到:

例如,最后一个星期四是:

select  case 
        when to_char(sysdate, 'D') < 4 then sysdate - to_char(sysdate, 'D') - 7 + 4
        else sysdate - to_char(sysdate, 'D') + 4
        end
from    dual
使用下一天日期值、日期字符串函数。取当前日期SYSDATE并从中减去7天,然后找到与一周中所需日期匹配的第二天

因此,要获得最近的星期三:

SELECT NEXT_DAY( TRUNC( SYSDATE ) - 7, 'WEDNESDAY' )
FROM DUAL
使用下一天日期值、日期字符串函数。取当前日期SYSDATE并从中减去7天,然后找到与一周中所需日期匹配的第二天

因此,要获得最近的星期三:

SELECT NEXT_DAY( TRUNC( SYSDATE ) - 7, 'WEDNESDAY' )
FROM DUAL

筛选过去7天的数据,并使用工作日的联接表达式…请提供-表数据、预期输出等。能否添加过去7天的示例数据筛选器,并使用工作日的联接表达式…请提供-表数据、预期输出,等等。你能添加一个更好的方法示例:@MT0谢谢你的回复。我相信这绝对是前进的方向。也就是说,当我这样做时,我会收到一个错误。我的SQL是:选择a.report\u name,CASE a.frequency WHEN'Daily',然后TRUNCSYSDATE ELSE NEXT\u daysdate-7,a.frequency END expected\u dt,b.create\u dt from schedule a LEFT OUTER JOIN reports b on a.report\u name=b.report\u name;当我运行这个函数时,我得到了错误:ORA-00932,不一致的数据类型:预期CHAR get DATE,并且行/列在NEXT_DAY函数中指向a.frequency。也就是说,a.frequency列是varchar2,所以我不确定它是如何被识别为日期的。这是一个更好的方法:@MT0感谢您的响应。我相信这绝对是前进的方向。也就是说,当我这样做时,我会收到一个错误。我的SQL是:选择a.report\u name,CASE a.frequency WHEN'Daily',然后TRUNCSYSDATE ELSE NEXT\u daysdate-7,a.frequency END expected\u dt,b.create\u dt from schedule a LEFT OUTER JOIN reports b on a.report\u name=b.report\u name;当我运行这个函数时,我得到了错误:ORA-00932,不一致的数据类型:预期的CHAR get DATE,并且行/列指向NEXT_DAY函数中的a.frequency。也就是说,a.frequency列是varchar2,所以我不确定如何将其识别为dateTO_CHAR DATE,“D”取决于NLS_TERRITORY设置,并将根据其在世界上的运行位置给出不同的结果。更改会话集NLS_TERRITORY='AMERICA';从DUAL中选择日期“2017-08-11”和“D”;输出6但如果更改会话集NLS_TERRITORY='UNITED KINGDOM';然后输出5。如果今天是星期一,而您需要上一个星期二,因为您需要返回上一周。@MT0:同意,在美国,星期四需要当地的第5天。该案例应正确处理最后一周。next_day是更好的选择,尽管to_CHAR date“D”取决于NLS_TERRITORY设置,并将根据它在世界上的运行位置给出不同的结果。更改会话集NLS_TERRITORY='AMERICA';从DUAL中选择日期“2017-08-11”和“D”;输出6但如果更改会话集NLS_TERRITORY='UNITED KINGDOM';然后输出5。如果今天是星期一,而您需要上一个星期二,因为您需要返回上一周。@MT0:同意,在美国,星期四需要当地的第5天。该案例应正确处理最后一周。不过,第二天是更好的选择