簡體   English   中英

在T-SQL函數中使用while循環

[英]Using while loop in T-SQL function

這里是非數據庫程序員。 碰巧是這樣,我需要在T-SQL中創建一個函數,該函數返回給定日期之間的工作日計數。 我認為最簡單的方法是使用while循環。 問題是,一旦我寫類似

while @date < @endDate
begin

end

該語句將不會執行,聲稱“關鍵字'return'附近的語法不正確”(不是很有幫助)。 哪里出問題了?

PS完整代碼:

ALTER FUNCTION [dbo].[GetNormalWorkdaysCount] (
@startDate DATETIME,
@endDate DATETIME
)   
RETURNS INT

AS
BEGIN
    declare @Count INT,
            @CurrDate DATETIME
    set @CurrDate = @startDate

    while (@CurrDate < @endDate)
    begin

    end

    return @Count
END
GO

與某些語言不同,SQL Server中的BEGIN / END對不能為空-它們必須至少包含一個語句。


至於您的實際問題-您已經說過自己不是數據庫程序員。 大多數SQL初學者傾向於走同一條路-嘗試編寫過程代碼來解決問題。

鑒於SQL是一種基於集合的語言-通常最好找到一個基於集合的解決方案,而不是使用循環。

在這種情況下,日歷表將是真正的幫助。 該表每個日期包含一行,另外的列則指示對您的業務有用的信息(例如您認為是工作日的信息)。 然后,您的工作日查詢如下所示:

SELECT COUNT(*) from Calendar
where BaseDate >= @StartDate and BaseDate < @EndDate and IsWorkingDay = 1

填寫“日歷”表成為一項一次性的練習,您可以輕松地為其填充例如30年的日期。

在SQL Server中使用任何循環絕不是一個好主意:)

幾乎沒有更好的解決方案,請參考已經在StackOverflow上提出的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM