1

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

03/06/2011-03/12/2011

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

03/06/2011-03/13/2011

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

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
4

3 回答 3

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,'SUNDAY')

,'mm/dd/yyyy') 从双周结束

在您的此查询中,您正在检查星期日。

并且您想找出星期六作为周末。

所以只要把这个星期天改成星期六,你就会得到你想要的答案(结果):)

于 2011-03-14T13:38:48.317 回答
1

'DAY' 格式是正确填充的,因此所有结果的长度相同。(我不知道 Oracle 为什么要这样做,这对我来说似乎很愚蠢。)您想要查找'SATURDAY 'and 'SUNDAY ',或者修剪结果,或者使用格式 'FMDAY'。

于 2011-03-13T06:24:22.490 回答