在SQL中使用select语句创建函数

时间:2012-09-25 16:04:30

标签: sql function sql-function

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

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

2 个答案:

答案 0 :(得分:3)

DATEDIFF不会返回日期时间。它返回一个int。

您的功能可能如下所示:

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

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

答案 1 :(得分: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