ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sql语句建立日历

sql语句建立日历

原创 Linux操作系统 作者:lfree 时间:2010-06-20 15:20:35 0 删除 编辑
http://www.itpub.net/thread-469543-1-1.html

2005年的帖子:

语句如下:

/* Formatted on 2010/06/20 15:13 (Formatter Plus v4.8.8) */
SELECT   CASE
            WHEN (new_yweek =
                     MIN (new_yweek) OVER (PARTITION BY mon ORDER BY new_yweek)
                 )
               THEN mon_name
            ELSE NULL
         END AS MONTH,
         new_yweek AS yweek,
         ROW_NUMBER () OVER (PARTITION BY mon ORDER BY new_yweek) AS mweek,
         SUM (DECODE (wday, '1', mday, NULL)) AS sun,
         SUM (DECODE (wday, '2', mday, NULL)) AS mon,
         SUM (DECODE (wday, '3', mday, NULL)) AS tue,
         SUM (DECODE (wday, '4', mday, NULL)) AS wed,
         SUM (DECODE (wday, '5', mday, NULL)) AS thu,
         SUM (DECODE (wday, '6', mday, NULL)) AS fri,
         SUM (DECODE (wday, '7', mday, NULL)) AS sat
    FROM (SELECT dayofyear AS everyday, TO_CHAR (dayofyear, 'mm') AS mon,
                 TO_CHAR (dayofyear, 'Month') AS mon_name,
                 TO_CHAR (dayofyear, 'w') AS mweek,
                 TO_CHAR (dayofyear, 'ww') AS yweek,
                 CASE
                    WHEN (TO_CHAR (TO_DATE (&year || '0101', 'yyyymmdd'), 'd') >
                                                                           '1'
                         )
                    AND (TO_CHAR (dayofyear, 'd') <
                            TO_CHAR (TO_DATE (&year || '0101', 'yyyymmdd'),
                                     'd'
                                    )
                        )
                       THEN TO_CHAR (TO_CHAR (dayofyear, 'ww') + 1, 'fm00')
                    ELSE TO_CHAR (dayofyear, 'ww')
                 END AS new_yweek,
                 TO_CHAR (dayofyear, 'd') AS wday,
                 TO_CHAR (dayofyear, 'dd') AS mday
            FROM (SELECT       TO_DATE (&year || '0101',
                                        'yyyymmdd'
                                       )
                             + LEVEL
                             - 1 AS dayofyear
                        FROM DUAL
                  CONNECT BY LEVEL <=
                                TO_CHAR (TO_DATE (&year || '1231', 'yyyymmdd'),
                                         'ddd'
                                        )))
GROUP BY mon, mon_name, new_yweek
/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-665723/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 变态的MS 记事本
请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969578