我的任務是創建表值函數,該函數將具有一個DATETIME參數,並且該函數返回每月從第一天到最後一天的每個日期,例如,我從該參數中給出了功能日期04/12/2015,它將打印12月的所有31天日期。使用表值函數找出每月從第一天到最後一天的每個日期
我已經創建了2個標量函數(這是在暗示分配)一個計算第一天
CREATE FUNCTION firstday
(
@first DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN CAST(MONTH(@first) AS VARCHAR) + '/' + '01/' + + CAST(YEAR(@first) AS VARCHAR)
END
和第二計算最後一天:
CREATE FUNCTION lastday
(
@last DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@last))),DATEADD(mm,1,@last)),101)
END
這裏是有價值的表函數但我不知道如何使用它內部的標量函數
CREATE FUNCTION get_months_dates
(
@mydate DATETIME
)
RETURNS TABLE
AS
RETURN
WITH Calender AS
(
SELECT **first_function** AS CalenderDate
UNION ALL
SELECT CalenderDate + 1 FROM Calender
WHERE CalenderDate + 1 <= **last_function**
)
SELECT [Date] = CONVERT(VARCHAR(10),CalenderDate,25)
FROM Calender
OPTION (MAXRECURSION 0)
我是我們ing sql-server 2014.
如果我們要完全做拉薩的作業,而不是指出他們如何去做,那麼讓我們給出最佳做法。這是2014年的SQL,我們可以使用DATEFROMPARTS - https://msdn.microsoft.com/en-GB/library/hh213228.aspx – eftpotrm
哈哈,真的很好說,直到你提到它是一個家庭作業才意識到:) –
@ eftpotrm我已經使用datefromparts的方法將無法正常工作,因爲我從spt_values表中選擇了前31位,並且在月數少於31天時將失敗。 –