日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL打印全年日历

發布時間:2025/3/19 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL打印全年日历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文:SQL打印全年日歷

數據庫環境:SQL SERVER 2008R2

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

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

下面直接分享SQL

/*基礎數據:年初日期,全年有多少天*/ WITH x0AS ( 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),/*枚舉全年的所有日期*/x1AS ( SELECT DATEADD(DAY, number, yearbegin) AS ndateFROM x0 ,master.dbo.spt_values sptWHERE spt.type = 'P'AND spt.number >= 0AND spt.number <= dayscount),/*羅列全年日期對應的月份,第幾周,星期幾,本月第幾天*/x2AS ( SELECT ndate ,DATEPART(month, ndate) AS nmonth ,DATEPART(week, ndate) AS nweek ,DATEPART(weekday, ndate) AS nweekday ,DATEPART(day, ndate) AS ndayFROM x1),/*按月份、所在周分組,生成全年日歷*/x3AS ( SELECT nmonth ,nweek ,ISNULL(CAST(MAX(CASE nweekdayWHEN 1 THEN ndayEND) AS VARCHAR(2)), '') AS 日 ,ISNULL(CAST(MAX(CASE nweekdayWHEN 2 THEN ndayEND) AS VARCHAR(2)), '') AS 一 ,ISNULL(CAST(MAX(CASE nweekdayWHEN 3 THEN ndayEND) AS VARCHAR(2)), '') AS 二 ,ISNULL(CAST(MAX(CASE nweekdayWHEN 4 THEN ndayEND) AS VARCHAR(2)), '') AS 三 ,ISNULL(CAST(MAX(CASE nweekdayWHEN 5 THEN ndayEND) AS VARCHAR(2)), '') AS 四 ,ISNULL(CAST(MAX(CASE nweekdayWHEN 6 THEN ndayEND) AS VARCHAR(2)), '') AS 五 ,ISNULL(CAST(MAX(CASE nweekdayWHEN 7 THEN ndayEND) AS VARCHAR(2)), '') ASFROM x2GROUP BY nmonth ,nweek)/*將月份相同的值只在第一行顯示*/SELECT REPLACE(CASE WHEN ROW_NUMBER() OVER ( PARTITION BY nmonth ORDER BY nweek ) = 1THEN nmonthELSE -1END, -1, '') AS 月份 ,日 ,一 ,二 ,三 ,四 ,五 ,六FROM x3

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

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

貼一下結果

??????? ?????

?

(本文完)

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的SQL打印全年日历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。