0

我已经建立了一个选择语句来选择参与者首次记录在数据库中的日期。但是我想从这个 select 语句中创建一个函数来使用它。我对 SQL 相当陌生,以前从未构建过函数。我的选择语句如下所示:

Select DATEDIFF(day, (select min(startdatetime)
                        from GamePlay
                     ), enddatetime)
  from GamePlay
 where ParticipantID = '200'

我尝试的功能如下所示:

CREATE FUNCTION daysPlayed (@ParticipantID int)
RETURNS DateTime
AS
BEGIN
    Return DATEDIFF(day, (select min(startdatetime)
                            from GamePlay
                         ), enddatetime)
      from GamePlay
     where ParticipantID = @ParticipantID
END
GO
4

2 回答 2

3

DATEDIFF 不返回日期时间。它返回一个整数。

您的函数可能如下所示:

CREATE FUNCTION daysPlayed (@ParticipantID int)
RETURNS INT
AS
BEGIN
    DECLARE @result INT
    SELECT @result=DATEDIFF(day, (select min(startdatetime) from GamePlay), enddatetime) from GamePlay where ParticipantID = @ParticipantID
    RETURN @result

END

但我不认为它会做你想做的事。另外,请注意,在选择大量行时使用函数会保证性能下降,并且您可能无法使用在表中设置的某些索引。

于 2012-09-25T16:23:12.287 回答
1

我不确切知道您想要什么,但查看此示例可能会有所帮助

CREATE FUNCTION mDay (@Date nchar(10))
RETURNS nchar(2)
AS
BEGIN
RETURN substring(@Date,9,2)
END


SELECT     dbo.Courses.MID, dbo.Masters.ID, dbo.Masters.Name,COUNT(CASE dbo.mDay(CDate) WHEN '01' THEN 2 END) AS day1

FROM         dbo.Courses INNER JOIN
                  dbo.Masters ON dbo.Courses.MID = dbo.Masters.MCode
WHERE     (dbo.Courses.CLevel = @Kind) AND (dbo.Courses.CDate BETWEEN @Date1 AND @Date2)
GROUP BY dbo.Courses.MID, dbo.Masters.Name, dbo.Masters.Family, dbo.Masters.ID
于 2012-09-25T16:29:20.597 回答