你還在通過Asp.Net控制項或者伺服器端語句處理來產生日曆表格嗎?
或者你還在用客戶段javascript來產生日曆表格嗎?
那麼他們產生的表格是不是都是周日排在第一列?
請看我產生的:
9年2月份
9年6月份
9年7月份
只是通過一段簡單的SQL語句(預存程序),傳入時間,輸出以星期一打頭列的日曆表格。
換成這個角度來處理,大家還會不會在C#後台為算出第幾星期而傷腦筋?
O(∩_∩)O哈哈~
其實也沒有什麼,就是一段小小的預存程序,不就是T-SQL嘛,大牛就不要拍磚了。
不過對小蝦來講,確實是實用啊,貼首頁了,我臉皮厚,磚頭都拍不爛,不信你們試試~
預存程序貼出如下:
Code
-- =============================================
-- Author: chf
-- Create date: 2009-06-25
-- Description: 傳入時間,返回當前月份列表
-- =============================================
alter PROCEDURE GetMonthTable
(
@Date datetime
)
AS
BEGIN
DECLARE @Start DATETIME,@End DATETIME
DECLARE @Index INT
SET @Start = DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)
SET @End = DATEADD(MONTH,1,@Start)
SET @Index = DATEDIFF(DAY,-1,@Start)%7 - 1;
SET @Start = DATEADD(mm,DATEDIFF(mm,0,@Date),0)
SET @End = DATEADD(mm,1,@Start) - 1
SET @Index= DATEDIFF(day,0,@Start)%7
;WITH temp(date,row,col) AS
(
SELECT date=1,row=@Index/7+1,col=@Index%7+1
UNION ALL
SELECT date=date+1,row=(@Index+date)/7+1,col=(@Index+date)%7+1
FROM temp
WHERE date <= DATEDIFF(DAY,@Start,@End)
)
SELECT ISNULL(CONVERT(CHAR(2),[1]),'') AS 一,
ISNULL(CONVERT(CHAR(2),[2]),'') AS 二,
ISNULL(CONVERT(CHAR(2),[3]),'') AS 三,
ISNULL(CONVERT(CHAR(2),[4]),'') AS 四,
ISNULL(CONVERT(CHAR(2),[5]),'') AS 五,
ISNULL(CONVERT(CHAR(2),[6]),'') AS 六,
ISNULL(CONVERT(CHAR(2),[7]),'') AS 日
FROM temp
PIVOT
(
MAX(date) FOR col IN ([1],[2],[3],[4],[5],[6],[7])
) AS B
END
GO