![](/img/trans.png)
[英]How to pass a current row value as a parameter to function in a stored procedure
[英]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.