Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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 日期范围集_Sql_Oracle_Plsql_Oracle10g - Fatal编程技术网

Sql 日期范围集

Sql 日期范围集,sql,oracle,plsql,oracle10g,Sql,Oracle,Plsql,Oracle10g,我有一个问题分为两部分 第一部分 如何获取以下sysdate为当前周的记录集 07-Apr-2013 - 13-Apr-2013 14-Apr-2013 - 20-Apr-2013 21-Apr-2013 - 27-Apr-2013 28-Apr-2013 - 04-May-2013 如果本周已过2012年4月7日-2013年4月13日,则接下来的四组。所以它总是有4周的时间 第二部分 如果本周在日期范围内,即2012年4月7日至2013年4月13日,我希望从列表中选择周一和周五 如何获得所需

我有一个问题分为两部分

第一部分

如何获取以下sysdate为当前周的记录集

07-Apr-2013 - 13-Apr-2013
14-Apr-2013 - 20-Apr-2013
21-Apr-2013 - 27-Apr-2013
28-Apr-2013 - 04-May-2013
如果本周已过2012年4月7日-2013年4月13日,则接下来的四组。所以它总是有4周的时间

第二部分

如果本周在日期范围内,即2012年4月7日至2013年4月13日,我希望从列表中选择周一和周五

如何获得所需的输出

select 
  max(trunc(sysdate) + level - 7) as sunday,
  max(trunc(sysdate) + level - 2) as friday,
  max(trunc(sysdate) + level - 1) as saturday
from dual
connect by level < 30
group by to_char(sysdate + level, 'iw')
having max(trunc(sysdate) + level - 1) <= sysdate + 27
order by 1 

我对您在示例中提供的日期范围有点困惑,因为每个范围的开始日期都是2013年的一个星期日,而您显示2012年为一年。我将假设2012年是一个打字错误

这能满足你的需要吗

select 
case
    when trunc(sysdate) between start_date and end_date
    then to_char(start_date + 1, 'DD-MON-YYYY')
    else to_char(start_date, 'DD-MON-YYYY')
end
|| ' - ' ||
case
    when trunc(sysdate) between start_date and end_date
    then to_char(end_date - 1, 'DD-MON-YYYY')
    else to_char(end_date, 'DD-MON-YYYY')
end date_range
from
(    
    select 
        next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN') start_date,
        next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT') end_date
    from dual
    connect by level < 5
)
如果你只需要4周,那么你可以这样做

select 
    to_char(next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN'), 'DD-MON-YYYY') 
    || ' - ' ||
    to_char(next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT'), 'DD-MON-YYYY') date_range
from dual
connect by level < 5

我对您在示例中提供的日期范围有点困惑,因为每个范围的开始日期都是2013年的一个星期日,而您显示2012年为一年。我将假设2012年是一个打字错误

这能满足你的需要吗

select 
case
    when trunc(sysdate) between start_date and end_date
    then to_char(start_date + 1, 'DD-MON-YYYY')
    else to_char(start_date, 'DD-MON-YYYY')
end
|| ' - ' ||
case
    when trunc(sysdate) between start_date and end_date
    then to_char(end_date - 1, 'DD-MON-YYYY')
    else to_char(end_date, 'DD-MON-YYYY')
end date_range
from
(    
    select 
        next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN') start_date,
        next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT') end_date
    from dual
    connect by level < 5
)
如果你只需要4周,那么你可以这样做

select 
    to_char(next_day(trunc(sysdate - 7 + ((level - 1) * 7)), 'SUN'), 'DD-MON-YYYY') 
    || ' - ' ||
    to_char(next_day(trunc(sysdate) + ((level - 1) * 7), 'SAT'), 'DD-MON-YYYY') date_range
from dual
connect by level < 5
第1部分从本周开始的4周

SELECT TO_CHAR(trunc(SYSDATE, 'DY')) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 6) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+7) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 13) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+14) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 20) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+21) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 27) from dual
;
第2部分本周的星期一和星期五:

SELECT trunc(SYSDATE, 'DY')+1 "Monday", trunc(SYSDATE, 'DY')+5 "Friday"
FROM dual;
以下是。

第1部分从当前一周开始的4周

SELECT TO_CHAR(trunc(SYSDATE, 'DY')) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 6) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+7) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 13) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+14) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 20) from dual
UNION
SELECT TO_CHAR(trunc(SYSDATE, 'DY')+21) || ' - ' || TO_CHAR(trunc(SYSDATE, 'DY')+ 27) from dual
;
第2部分本周的星期一和星期五:

SELECT trunc(SYSDATE, 'DY')+1 "Monday", trunc(SYSDATE, 'DY')+5 "Friday"
FROM dual;

这是。

Egor,我如何根据升序日期对其进行排序?i、 e.2013年4月1日应该是第一个。@Polppan-使用order by 1 asc.Egor我已经尝试过了,但是没有得到正确的结果,这是因为它被转换为char?Egor,另一件事是周应该从当前系统日期开始,而不是从月初开始。Egor,我如何根据升序日期对它进行排序?i、 e.2013年4月1日应该是第一个。@Polppan-使用order by 1 asc.Egor我已经尝试过了,但是没有得到正确的结果,因为它被转换为char?Egor,另一件事是周应该从当前系统日期开始,而不是从月初开始。jwhite9 2012是一个打字错误,我已经更正了。我想在周日开始这一周,并且可以有一个条目,如2013年4月7日-2013年4月13日-2013年4月14日-2013年4月20日。这一周从周日开始,但第一周从周一开始。您声明如果sysdate在您希望的星期一和星期五的日期范围内。我更新了我的帖子,向你展示了如何获得你要求的格式。你是对的,我的错。我如何在2013年4月8日-2013年4月13日和2013年4月14日-2013年4月20日的第二行中获取此信息?我创建了一个视图,然后将开始日和结束日合并以获取2013年4月8日-2013年4月13日。非常感谢,谢谢。jwhite9 2012是一个打字错误,我已经改正了。我想在周日开始这一周,并且可以有一个条目,如2013年4月7日-2013年4月13日-2013年4月14日-2013年4月20日。这一周从周日开始,但第一周从周一开始。您声明如果sysdate在您希望的星期一和星期五的日期范围内。我更新了我的帖子,向你展示了如何获得你要求的格式。你是对的,我的错。我如何在2013年4月8日-2013年4月13日和2013年4月14日-2013年4月20日的第二行中获取此信息?我创建了一个视图,然后将开始日和结束日合并以获取2013年4月8日-2013年4月13日。非常感谢,谢谢。