2013-03-11 48 views
0

我試圖創建一個基於其他列一列,但它不斷給我的錯誤:串連問題

「錯誤轉換爲varchar浮動」我認爲這是試圖增加而不是串聯的。

我的發言是這樣的:

select column1 + ' ' + column2 + ' ' as ColumnDesired 

什麼想法?

+1

什麼是你的列上的數據類型? – Taryn 2013-03-11 21:01:29

回答

3

那麼,如果任何這些列是數字,它正試圖添加由於數據類型的優先順序。例如。 SELECT 4 + 'cow'正在採取4並嘗試將cow以數學方式添加到它,因爲它試圖將所有表達式轉換爲具有最高先例的數據類型(在這種情況下爲INT)。

因此,請使用CONVERT來確保將所有數字和其他非字符串數據類型列明確視爲字符串。我猜32個字符應該足夠用於任何這些列,只要注意不要意外截斷超過32個字符的任何列。

SELECT ColumnDesired = CONVERT(VARCHAR(32), column1) + CONVERT(VARCHAR(32), column2) 
FROM ... 

您可能還需要應對NULL小號

SELECT ColumnDesired = COALESCE(CONVERT(VARCHAR(32), column1), '') 
     + COALESCE(CONVERT(VARCHAR(32), column2), '') 
FROM ... 
+0

這確實奏效,所以謝謝。但是我不明白的是,我已經寫過類似以前的連接語句,並且sql server可以正常工作。 – user1991372 2013-03-11 21:07:37

+0

@ user1991372一些連接序列將會正常 - 這些都是關於類型的。通常情況下,如果您要在網頁或應用程序中呈現數據,那麼在該處進行連接要安全得多(您正在處理單個值而不是集合,並且在顯示時將所有內容都視爲一個字符串)。 – 2013-03-11 21:11:17

2

如果您嘗試來連接的列,你可能需要的,一個是數字轉換:

select cast(column1 as varchar(50)) + ' ' + column2 + ' ' as ColumnDesired 

select column1 + ' ' + cast(column2 as varchar(50)) + ' ' as ColumnDesired 
1

其中一列是數字,使用CONVERT()。底線,從不依賴於隱式轉換,CONVERT()所有非(N)CHAR /(N)VARCHAR值。

+0

這解釋了它。它通常必須使用隱式轉換。 – user1991372 2013-03-11 21:09:57