![](/img/trans.png)
[英]SQL Server Management Studio using While loop function to split result
[英]SQL Server - How to bring back and the result of a WHILE BREAK Loop in a function?
我有這段有效的代碼
DECLARE @IntDte as INT
SET @IntDte = 1
WHILE @IntDte <=10
BEGIN
IF (SELECT isworkday FROM Calendar WHERE date=CAST(FLOOR(CAST(GETDATE()-@IntDte As float))As datetime))= 1 -- 1 is a workday 0 is a weekend
BREAK
ELSE
SET @IntDte= @IntDte + 1
END
PRINT @IntDte
這將帶回最后一個整數,該整數將帶回最后一個工作日(即,如果今天是星期一,則循環將帶回4,因為那是星期五。
我想盡力而為的是將其構建為獲取日期的函數。 我到目前為止有這個,但它不正確-
Create FUNCTION [dbo].[PREVIOUSWORKINGDAY]
RETURNS datetime
AS BEGIN
DECLARE @PWD as datetime
SET @PWD = GetDate() -
(DECLARE @IntDte as INT
SET @IntDte = 2
WHILE @IntDte <=10
BEGIN
IF (SELECT isworkday FROM Calendar WHERE date=CAST(FLOOR(CAST(GETDATE()-@IntDte As float))As datetime))= 1 -- 1 is a workday 0 is a weekend
BREAK
ELSE
SET @IntDte= @IntDte + 1
END
RETURN)
RETURN @PWD
END
在當前出現語法錯誤的情況下,任何人都可以指出錯誤之處-
消息102,級別15,狀態1,過程PREVIOUSWORKINGDAY,第2行'RETURNS'附近的語法不正確。
消息156,級別15,狀態1,過程PREVIOUSWORKINGDAY,第7行關鍵字'DECLARE'附近的語法錯誤。
消息102,級別15,狀態1,過程PREVIOUSWORKINGDAY,第16行')'附近的語法不正確。
消息178,級別15,狀態1,過程PREVIOUSWORKINGDAY,第18行在這種情況下不能使用帶有返回值的RETURN語句。
我以為我在錯誤的地方放了一些東西,但不確定應該去哪里。
謝謝
SQL的問題似乎是您有兩個return語句,並且您試圖嵌入聲明語句。 這是我重新編寫您的版本的方法:
Create FUNCTION [dbo].[PREVIOUSWORKINGDAY]
RETURNS datetime
AS BEGIN
DECLARE @PWD as datetime
DECLARE @IntDte as INT
SET @IntDte = 2
WHILE @IntDte <=10
BEGIN
IF (SELECT isworkday FROM Calendar WHERE date=CAST(FLOOR(CAST(GETDATE()-@IntDte As float))As datetime))= 1 -- 1 is a workday 0 is a weekend
BREAK
ELSE
SET @IntDte= @IntDte + 1
END
SET @PWD = GetDate() - IntDte
RETURN @PWD
END
我就是這樣寫的。
Create FUNCTION [dbo].[PREVIOUSWORKINGDAY]
RETURNS datetime
AS BEGIN
DECLARE @PWD as datetime
SELECT @PWD=Max(date)
FROM Calendar
WHERE isworkday=1
AND date<CONVERT(DATE,GETDATE())
RETURN @PWD
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.