我已经构建了一个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
答案 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