2013-01-04 199 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(2)='2'爲val2 char(10)='20130104'比它沒有錯誤。 – user1947491

+0

爲什麼你隨機添加不同類型的值?你期待什麼結果?如果你真的想把'2'加到'datetime'的值,你已經找到了一種方法來做到這一點。 –

回答

0

當焦炭轉化爲日期時間..它通常false..because一些字符不能被轉換到datetime..and可以overflow..just像「2」,「A」等。

你需要一個像'2013-01-04'這樣的字符值......它們可以被正確轉換。

3

當組合不同類型的兩個運算符時,將會有一個隱式類型轉換。轉換的內容由Data Type Precedence規則控制。

兩個charint比日期時間優先級低所以你的查詢是等價的:

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

鑄造int值2datetime的作品就好了,給你1900-01-03 00:00:00.000

鑄造char值但由於字符串2不能被解釋爲有效的日期時間值,所以2對日期時間不起作用。