2012-03-06 2 views
0

테이블의 datetime 변수와 함께 저장 프로 시저에 전달 된 datetime 변수를 어떻게 비교합니까?datetime 변수를 비교

내 어디에 절 @paramDate 값에 오류, 내가 (@Sql를) 간부 인 경우 2012년 2월 10일

set sql = 'WHERE product.RegisteredDate >= ' + @paramDate 

가 실패입니다 :

Conversion failed when converting datetime from character string. 

들으

+1

당신은 실제 코드를 붙여 넣을 수 있습니다. 당신이 가진 발췌 문장은 이해가되지 않습니다. – Khan

답변

3
SET @sql = '... WHERE product.RegisteredDate >= ''' 
    + CONVERT(CHAR(8), @paramDate, 112) + ''';'; 

@ParamDate 경우 NULL 아마 당신은이 작업을 수행 할 수 있습니다 심지어

SET @sql = 'SELECT ...'; 

SET @sql = @sql + COALESCE(' WHERE product.RegisteredDate >= ''' 
    + CONVERT(CHAR(8), @paramDate, 112) + ''';', ''); 

또는를 :

SET @sql = 'SELECT ...'; 

IF @paramDate IS NOT NULL 
BEGIN 
    SET @sql = @sql + '... WHERE product.RegisteredDate >= ''' 
     + CONVERT(CHAR(8), @paramDate, 112) + ''';'; 
END 
+0

Thx Aaron, 구문이 작동했습니다. 변환 기능에 대해 설명해 주시겠습니까? 변환 (CHAR (10), @ paramDate, 112)? char (10)은 무엇입니까? 112? thanks – Ben

+0

'CHAR'는 데이터 유형입니다. '10 '은 10 자입니다. '112'는 스타일이고'YYYYMMDD'입니다. 어떤 일이 일어나는지 보려면'SELECT CONVERT (CHAR (10), GETDATE(), 112); '라고 말할 수 있습니다. 그리고 나는 새로운 티켓을 열어야합니다 있는지 확실하지 않습니다.이 CHAR (8)'(난 항상 112, 120 ('YYYY-MM-DD') 사이에서 혼란스러워'해야 그것을 생각 –

+1

들으을 많이 오지만, NULL 값이 sp에 전달되는지 궁금 해서요, 어떻게 변환을 건너 뛸까요? – Ben

2

이 시도 :

CONVERT(varchar, @paramDate, 101) 

자세한 내용은 여기를 참조하십시오. ormation :이다 http://msdn.microsoft.com/en-us/library/ms187928.aspx

+0

문제는 날짜 값에 문자열 구분 기호가 있어야하기 때문에 도움이되지 않습니다. 101은 어쨌든 사용할 수있는 안전한 형식이 아닙니다 (2 월 10 일 또는 10 월 2 일입니까?) 그리고 char/varchar 등으로 변환 할 때 길이를 명시 적으로 지정해야합니다. –

+0

아, 저는 2 월 10 일을 오늘에 가까워 졌다고 가정했습니다. Mea culpa. –

0

을 동적 쿼리를 실행하려는 때문에, 당신은 exec 대신 sp_executesql을 사용하여 생성 된 쿼리에서 매개 변수를 사용할 수 있습니다. sp_executesql에 대한 세부 정보입니다. 예를 들어

는 :

set @sql = 'WHERE product.RegisteredDate >= @dynamicParm' 

EXECUTE sp_executesql @sql, N'@dynamicParm DATETIME', @dynamicParm = @paramDate 
관련 문제