2013-01-04 5 views
1
declare @v1 datetime = getdate(); 
declare @v2 int = 2; 
select @v1 + @v2; 
--------------------------- 
2013-01-06 08:16:20.620 

그러나 날짜 시간 변환

declare @v1 datetime = getdate(); 
declare @v2 char(1) = '2'; 
select @v1 + @v2; 
-------------------------- 

메시지 241, 수준 16, 상태 1

, 라인 5
변환에 실패했습니다.

오류가 발생합니다. 하지만 int @v2char @v2은 같은 값을 갖고 있습니까?

+0

'int @ v2'와'char @ v2'는 같은 값을 가지고 있지 않습니다. 하나는 int를 가지고 하나는 char을 가지고있다 – ethorn10

+0

ethorm10 : 내 질문은 왜 다른 사람 int gets.if 당신이 val2 char (10) = '20130104'로 val2 char (2) = '2' 그것보다 오류를 제공합니다. – user1947491

+0

왜 서로 다른 유형의 값을 무작위로 추가하고 있습니까? 어떤 결과를 기대합니까? 'datetime '값에'2'를 추가하고 싶다면, 이미 그것을 할 수있는 방법을 찾았습니다. –

답변

0

숯불 날짜로 변환했을 때 ..이 보통 어떤 문자를 false..because된다는 '2', 'A'등

같이 overflow..just 수 datetime..and로 변환 할 수없는

'2013-01-04'와 같은 char 값이 필요합니다 ... 올바르게 변환 될 수 있습니다 ..

3

두 유형의 연산자를 결합하면 암시 적 유형 변환이 적용됩니다. 변환 된 내용은 규칙에 의해 제어됩니다.

모두 char

int은 쿼리에 해당하므로 날짜보다 낮은 우선 순위가하십시오 datetime 작품

select @v1 + cast(@v2 as datetime); 

주조 int 값 2 그냥 벌금을과 char 값을 캐스팅하면 1900-01-03 00:00:00.000

을 제공합니다 그러나 2 문자열은 유효한 datetime 값으로 해석 될 수 없기 때문에 2을 datetime에 연결하면 작동하지 않습니다.