SQL - 周计算

时间:2011-03-13 05:13:55

标签: sql oracle date-arithmetic

我编写了一个SQL语句,它根据sysdate获取当前周。例如:如果日期是2011年3月12日(星期六),那么o / p应该是

  

03/06 / 2011-03 /二千零十一分之十二

但不知何故,当我运行下面的SQL查询时,我得到一个o / p:

  

03/06 / 2011-03 /二千零十一分之十三

有人可以帮我弄清楚查询有什么问题吗?感谢

SELECT CASE
         WHEN TO_CHAR(SYSDATE,'DAY') = 'SATURDAY' THEN 
          TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||to_char(sysdate,'mm/dd/yyyy') 
         WHEN TO_CHAR(SYSDATE,'DAY') = 'SUNDAY' THEN
          TO_CHAR(SYSDATE,'mm/dd/yyyy') || '-' ||to_char(next_day(sysdate,'SATURDAY'),'mm/dd/yyyy') 
         ELSE 
          TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||to_char(next_day(sysdate,'SUNDAY'),'mm/dd/yyyy') 
       END weeks 
  FROM DUAL

3 个答案:

答案 0 :(得分:1)

'DAY'格式正确填充,以便所有结果都具有相同的长度。 (我不知道Oracle为什么这样做,对我来说似乎很愚蠢。)你想要找'SATURDAY ''SUNDAY ',或者修剪结果,或者使用'FMDAY'格式。 / p>

答案 1 :(得分:1)

您只需在查询中进行一项更改..

SELECT CASE
WHEN TO_CHAR(SYSDATE,'DAY') = 'SATURDAY' THEN
        TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||to_char(sysdate,'mm/dd/yyyy')
       WHEN TO_CHAR(SYSDATE,'DAY') = 'SUNDAY' THEN
       TO_CHAR(SYSDATE,'mm/dd/yyyy') || '-' ||to_char(next_day(sysdate,'SATURDAY'),'mm/dd/yyyy')
       ELSE
        TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||
  

TO_CHAR(NEXT_DAY(SYSDATE, '星期日')

, 'MM / DD / YYYY')          结束几周     来自双重

在你的这个查询中,其他部分是你错误地检查星期日。

你希望在本周末找到星期六。

所以只需将星期日更改为星期六然后您将得到您想要的答案(结果)   :)

答案 2 :(得分:0)