沒留意過 SQL Server 中的類型轉換。 寫了句 SQL 來拼接字符串,指望着像常見的編程語言同樣, "字符串" + "非字符串" 獲得 "拼接後的字符串"。<br>sql
但實際上 SQL Server 只會把 字符串轉爲非字符串的類型,再進行相加。編程
例如:編程語言
<!-- lang: sql --> SELECT 3 + '*'; 輸出: Msg 245, Level 16, State 1, Line 1 在將 varchar 值 '*' 轉換成數據類型 int 時失敗。 SELECT '*' + 3; 輸出: Msg 245, Level 16, State 1, Line 1 在將 varchar 值 '*' 轉換成數據類型 int 時失敗。 SELECT '3' + GETDATE(); 輸出: Msg 241, Level 16, State 1, Line 1 從字符串向 datetime 轉換時失敗。
通常來講,SQL Server 中字母和符號是不能轉成數值類型的,例如:code
<!-- lang: sql --> SELECT CAST('*' AS INT); 輸出: Msg 245, Level 16, State 1, Line 1 在將 varchar 值 '*' 轉換成數據類型 int 時失敗。
可是, '+' 和 '-' 這兩個符號例外,它倆能夠被轉爲數值類型,而且值都爲0。字符串
<!-- lang: sql --> SELECT CAST('+' AS INT), CAST('-' AS INT), CAST('' AS INT); 輸出: 0 0 0
緣由是 SQL Server 在轉換時把 '-' 看成 '-0' ,'+' 看成 '+0' , '' 看成 '0' 來看待。date