簡體   English   中英

如何將Datetime值作為參數傳遞給存儲的函數?

[英]How to pass the Datetime value as parameter to a stored function?

我在SQL SERVER中創建了一個函數,該函數采用參數datetime值,而當我嘗試執行該函數時,我不知道如何將Datetime值作為參數傳遞給該函數,但出現此錯誤:無法轉換日期和/或字符串中的時間。

這是我的功能的代碼:

CREATE FUNCTION [dbo].[nb_pieces_produites] (@dateInsertion datetime)
returns decimal(4,0)
AS
BEGIN

DECLARE @year decimal(4,0), @month decimal(2,0), @day decimal(2,0) ,@hour 
decimal(2,0), @nbPiecesProduites decimal(4,0)

set @year = (select DATEPART(yyyy, @dateInsertion))
set @month = (select DATEPART(mm, @dateInsertion))
set @day = (select DATEPART(dd, @dateInsertion))
set @hour = (select DATEPART(hh, @dateInsertion))

set @nbPiecesProduites = (SELECT COUNT(DISTINCT Num_Serie) FROM [dbo].
[dbo_Test] WHERE @dateInsertion BETWEEN '@year-@month-@day @hour:00:00' AND 
'@year-@month-@day @hour:59:59')

return @nbPiecesProduites
END

這是我的查詢:

select [dbo].[nb_pieces_produites]('2017-06-19 11:38:52')

有人可以幫我嗎?

不要花費大量時間擺弄字符串-嘗試將數據始終保留為datetime數據。

要將日期時間向下舍入到前一個小時邊界,請使用DATEADD / DATEDIFF對:

CREATE FUNCTION [dbo].[nb_pieces_produites] (@dateInsertion datetime)
returns decimal(4,0)
AS
BEGIN

set @nbPiecesProduites = (SELECT COUNT(DISTINCT Num_Serie) FROM [dbo].
[dbo_Test] WHERE
date_column_from_table >= DATEADD(hour,DATEDIFF(hour,0,@dateInsertion),0)
   AND
date_column_from_table < DATEADD(hour,DATEDIFF(hour,0,@dateInsertion)+1,0)
)

return @nbPiecesProduites
END

而且,為了安全起見,請這樣稱呼它:

select [dbo].[nb_pieces_produites]('2017-06-19T11:38:52')

(有時,在某些設置下,SQL Server會將nnnn-nn-nn解釋為yyyy-dd-mm而不是yyyy-mm-dd,如果后面跟一個空格然后是一個時間,而不是使用T作為分隔符)

這是錯誤的,因為您的函數需要dateTime值,但是當您調用它時,您傳遞的字符串不是dateTime

將您的查詢更改為:

select [dbo].[nb_pieces_produites](getDate())
CREATE FUNCTION [dbo].[nb_pieces_produites] (@dateInsertion datetime)
RETURNS decimal(4,0)
AS
BEGIN
    RETURN 
    (
        SELECT COUNT(DISTINCT Num_Serie) 
        FROM dbo.dbo_Test 
        WHERE 
            -- Use the date part to compare
            CONVERT(date, [datetimecolumn]) = CONVERT(date, @dateInsertion) 
            -- Then compare with hour
            AND DATEPART(HOUR, [datetimecolumn]) = DATEPART(HOUR, @dateInsertion)
    )
END

暫無
暫無

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

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