首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于给定的年份间隔,获取一年中每周的天数(mon、tue、web、...、sun

对于给定的年份间隔,获取一年中每周的天数(mon、tue、web、...、sun
EN

Stack Overflow用户
提问于 2012-05-08 15:17:42
回答 1查看 368关注 0票数 1

我想找到这个问题的所有解决方案,“在给定的年限内,得到一年中每周的天数(mon,tue,web,...,sun)”。

还有人知道其他答案吗?请分享;)

这是我的查询:)

代码语言:javascript
复制
WITH dat AS
(SELECT &&start_year + level - 1 cur_year, DECODE(MOD(&start_year + level - 1, 4), 0, 0, 1) no_leap, 
TO_NUMBER(TO_CHAR(TO_DATE('01.01.'||TO_CHAR(&start_year + level - 1)), 'D')) d
FROM dual
CONNECT BY LEVEL < &end_year - &start_year + 2)
SELECT cur_year,
51 + DECODE(no_leap, 1, DECODE(d, 1, 2, 1), DECODE(d, 1, 2, 7, 2, 1)) mon,
51 + DECODE(no_leap, 1, DECODE(d, 2, 2, 1), DECODE(d, 2, 2, 1, 2, 1)) tue,
51 + DECODE(no_leap, 1, DECODE(d, 3, 2, 1), DECODE(d, 3, 2, 2, 2, 1)) wed,
51 + DECODE(no_leap, 1, DECODE(d, 4, 2, 1), DECODE(d, 4, 2, 3, 2, 1)) thu,
51 + DECODE(no_leap, 1, DECODE(d, 5, 2, 1), DECODE(d, 5, 2, 4, 2, 1)) fri,
51 + DECODE(no_leap, 1, DECODE(d, 6, 2, 1), DECODE(d, 6, 2, 5, 2, 1)) sat,
51 + DECODE(no_leap, 1, DECODE(d, 7, 2, 1), DECODE(d, 7, 2, 6, 2, 1)) sun
FROM dat;
EN

回答 1

Stack Overflow用户

发布于 2012-05-08 16:17:15

您应该利用Oracle的日期算术。如果将两个日期相减,则会返回一个数字,即两个日期之间的天数。如果没有整数差值,则返回实际差值:

代码语言:javascript
复制
SQL> select sysdate - to_date('20120504 15', 'yyyymmdd hh24') from dual;

SYSDATE-TO_DATE('2012050415','YYYYMMDDHH24')
--------------------------------------------
                                  3.76489583

请注意,这不包括timestamp,只包括date数据类型。执行timestamp运算将返回interval数据类型。

大多数解决方案将是

代码语言:javascript
复制
with dates as ( 
  select to_char(to_date('&start_year','yyyy') + level, 'fmDAY') as days
    from dual
  connect by level < to_date('&end_year','yyyy') - to_date('&start_year','yyyy')
          )
  select ...

请注意格式模型的fm modifier;这将删除尾随空格。

一般来说,在处理日期时,最好使用日期,而不是数字或字符。您的connect by子句CONNECT BY LEVEL < &end_year - &start_year + 2虽然很简单,但是为了使您的解决方案生效,您需要做很多额外的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10494287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档