国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQL打印全年日歷

2024-07-21 02:46:22
字體:
來源:轉載
供稿:網友
SQL打印全年日歷

數據庫環境:SQL SERVER 2008R2

我之前有寫過打印本月日歷的SQL,里頭有詳細的說明。具體請參考前面的博文——生成本月日歷。

全年日歷只是在本月日歷的基礎上加了月信息,并按月份分組求得。

下面直接分享SQL

/*基礎數據:年初日期,全年有多少天*/WITH    x0          AS ( SELECT   CONVERT(DATE, '2015-01-01') AS yearbegin ,                        CONVERT(DATE, '2015-12-31') AS yearend ,                        DATEDIFF(DAY, '2015-01-01', '2015-12-31') AS dayscount             ),/*枚舉全年的所有日期*/        x1          AS ( SELECT   DATEADD(DAY, number, yearbegin) AS ndate               FROM     x0 ,                        master.dbo.spt_values spt               WHERE    spt.type = 'P'                        AND spt.number >= 0                        AND spt.number <= dayscount             ),/*羅列全年日期對應的月份,第幾周,星期幾,本月第幾天*/        x2          AS ( SELECT   ndate ,                        DATEPART(month, ndate) AS nmonth ,                        DATEPART(week, ndate) AS nweek ,                        DATEPART(weekday, ndate) AS nweekday ,                        DATEPART(day, ndate) AS nday               FROM     x1             ),/*按月份、所在周分組,生成全年日歷*/        x3          AS ( SELECT   nmonth ,                        nweek ,                        ISNULL(CAST(MAX(CASE nweekday                                          WHEN 1 THEN nday                                        END) AS VARCHAR(2)), '') AS 日 ,                        ISNULL(CAST(MAX(CASE nweekday                                          WHEN 2 THEN nday                                        END) AS VARCHAR(2)), '') AS 一 ,                        ISNULL(CAST(MAX(CASE nweekday                                          WHEN 3 THEN nday                                        END) AS VARCHAR(2)), '') AS 二 ,                        ISNULL(CAST(MAX(CASE nweekday                                          WHEN 4 THEN nday                                        END) AS VARCHAR(2)), '') AS 三 ,                        ISNULL(CAST(MAX(CASE nweekday                                          WHEN 5 THEN nday                                        END) AS VARCHAR(2)), '') AS 四 ,                        ISNULL(CAST(MAX(CASE nweekday                                          WHEN 6 THEN nday                                        END) AS VARCHAR(2)), '') AS 五 ,                        ISNULL(CAST(MAX(CASE nweekday                                          WHEN 7 THEN nday                                        END) AS VARCHAR(2)), '') AS 六               FROM     x2               GROUP BY nmonth ,                        nweek             )/*將月份相同的值只在第一行顯示*/    SELECT  REPLACE(CASE WHEN ROW_NUMBER() OVER ( PARTITION BY nmonth ORDER BY nweek ) = 1                         THEN nmonth                         ELSE -1                    END, -1, '') AS 月份 ,            日 ,            一 ,            二 ,            三 ,            四 ,            五 ,            六    FROM    x3

代碼不算多,60多行,而且也好理解。如果覺得把“周日”放在第一列有點別扭,可以x2中生成所在周時對周日

做一些特別處理就可以了。

貼一下結果

(本文完)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古丈县| 金坛市| 全椒县| 贵州省| 沂源县| 阳曲县| 许昌市| 宝清县| 沾化县| 南宫市| 永安市| 佛教| 康定县| 浙江省| 望奎县| 水城县| 高雄县| 格尔木市| 饶平县| 永丰县| 特克斯县| 县级市| 新乡市| 习水县| 灵台县| 德惠市| 辽阳市| 仙居县| 奉新县| 健康| 天镇县| 平凉市| 丹棱县| 武穴市| 金平| 泗水县| 抚松县| 南部县| 都昌县| 德化县| 常州市|