2011-04-21 2 views
1

세 매개 변수를 DATETIME으로 변환하려고하는데 작동하지 않습니다. 이 쿼리를 실행할 때마다 datetime을 문자열에서 변환 할 때 변환에 실패했다는 오류가 발생합니다. 아마도 나는 회심에서 잘못하고있는 것일까 요? 누구든지 피드백을 제공 할 수 있다면.문자열에서 datetime을 변환하지 못했습니다.

@month varchar, 
    @day varchar, 
    @year varchar 

AS 
DECLARE @date DATETIME 
SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 101) 

Select * 
From events 
Where (EDate = @date) OR EDateEnd = @date OR @date Between EDate AND EDateEnd 
Order By EDate ASC 
+1

각 매개 변수에 대해 무엇을 전달합니까? – David

+0

Where Where식이 나를 혼란스럽게합니다. '(EDate = @ 날짜)와'EDateEnd = (@ 날짜) '의 차이점은 무엇입니까? – reporter

답변

3

당신은 당신의 매개 변수의 크기를 설정해야합니다. 아마도

@month varchar(2), 
@day varchar(2), 
@year varchar(4) 
0

표시된 변환 기능이 적절한 매개 변수와 함께 작동해야하기 때문에 이것은 단지 추측에 불과합니다.

두 자리 숫자로 연도가 전달됩니까? 이 경우 (이하 "101"형식이 예상) 전체 4 자리 연도로 전달 시도하거나 당신이 2 자리 연도를 전달하는 경우

SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 1) 

로 변경.

이 (세기와 여기 세기 않고의 차이를 참조하십시오 http://msdn.microsoft.com/en-us/library/ms187928.aspx)

편집

내가 두 번째 추측이 ... 오류가 명시 적있어 라인에하지 않을 수 있습니다 매개 변수를 Datetime 변수로 변환합니다. 이 전에 저를 태워있다 ...이 오류는 다음 줄에서 발생 될 수있다

Where (EDate = @date) OR EDateEnd = (@date) OR @date Between EDate AND EDateEnd 

을 EDATE 열 또는 EDateEnd 열 necessaryly 날짜 시간 열이 아닌 경우. 그것은 DateTime으로 변환 할 수없는 값을 포함 할 수 있습니다. (문자 필드에 DateTime 문자열을 저장할 수도 있고, null 값이 저장된 실제 날짜 필드 일 수도 있습니다.)

그러나 데이터베이스의 실제 스키마에 대한 자세한 정보가 없으면 알기 어렵습니다 . 우리가 할 수있는 최선은 추측입니다.

0

그게 효과가 있어야합니다. 매개 변수에 유효한 값을 제공했는지 확인하십시오.

업데이트

당신은 변환을위한 101 매개 변수를 잃게한다. 매개 변수가 유효한 값으로 통보하는 것으로,이 모두 2 자리, 4 자리 년 동안 일을해야합니다

SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year) 
관련 문제