Sql Server 類型轉換的一個小坑。

沒留意過 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

相關文章
相關標籤/搜索