使用SQL获取当月第三个星期五的日期,而不使用级别函数

使用SQL获取当月第三个星期五的日期,而不使用级别函数,sql,plsql,Sql,Plsql,使用SQL获取当月第三个星期五的日期(不使用级别函数),以及一个月内的工作日和所有月份的第三个星期五,谢谢您可以尝试下面的代码 SELECT NEXT_DAY(TO_DATE('JAN-2016','MON-YYYY')+13, 'FRIDAY') THIRD_FRIDAY FROM dual; 13:是使用第三周(加上13天)这里有一些东西可以让你在2016年的所有月份的第三个星期五。不过,我不知道为什么要避免使用“连接方式”和“级别” with months as (select to_d

使用SQL获取当月第三个星期五的日期(不使用级别函数),以及一个月内的工作日和所有月份的第三个星期五,谢谢您可以尝试下面的代码

SELECT NEXT_DAY(TO_DATE('JAN-2016','MON-YYYY')+13, 'FRIDAY') THIRD_FRIDAY FROM dual;

13:是使用第三周(加上13天)

这里有一些东西可以让你在2016年的所有月份的第三个星期五。不过,我不知道为什么要避免使用“连接方式”和“级别”

with months as (select to_date('01/01/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/02/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/03/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/04/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/05/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/06/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/07/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/08/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/09/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/10/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/11/2016', 'dd/mm/yyyy') start_of_month from dual union all
                select to_date('01/12/2016', 'dd/mm/yyyy') start_of_month from dual)
select start_of_month,
       next_day(start_of_month - 1, 'FRIDAY') + 14 third_friday_in_month
from   months;

至于您要求获得一个月的工作日数,这取决于您所说的“工作日”是什么意思。你是说工作日吗?还是平日减去公共假日?还有什么?

标记使用的dbms。(就日期/时间而言,许多dbms产品远远不符合ANSI SQL…)持续几个月?一个月?请多提。欢迎来到堆栈溢出!请阅读并尝试编辑您的问题。此外,请在该过程中编辑您的期望值。堆栈溢出不是免费的代码编写服务。谢谢这里的SQL Server版本:只需找到如何用PLSQL等价物替换T-SQL函数,如
to_CHAR(SYSDATE,'DAY')
welcome:)如果它解决了您的问题,请接受答案。