2012-09-25 3 views
0

나는 select 문을 만들어 참가자가 데이터베이스에 처음 기록 된 날짜를 선택했습니다. 그러나 그것을 사용하려면이 select 문에서 함수를 만들고 싶습니다. 나는 SQL을 처음 접했고 전에는 함수를 만들지 않았다. 내 선택 문은 다음과 같습니다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

는 소리 도움이 될 수 표시되지 않습니다. –

+0

열을 만들려면 뷰에서 함수를 호출하고 싶습니까? – Bradley

답변

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 

하지만 난 당신이하고 싶은 일을 할 것입니다 생각하지 않습니다. 또한 많은 수의 행에서 select 함수를 사용하면 성능이 보장되고 테이블에 설정 한 일부 인덱스를 사용하지 못할 수도 있습니다.

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