连接问题

时间:2013-03-11 21:00:18

标签: sql-server-2008

我正在尝试根据其他列创建一个列,但它一直给我错误:

“将varchar转换为float时出错”我认为它试图添加而不是连接。

我的陈述如下:

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

任何想法?

3 个答案:

答案 0 :(得分:3)

好吧,如果这些列中的任何一列都是数字,那么由于数据类型优先,它会尝试添加。例如。 SELECT 4 + 'cow'正在使用4并尝试以数学方式向其添加cow,因为它尝试将所有表达式转换为具有最高先例的数据类型(在这种情况下,INT )。

因此,使用CONVERT确保将所有数字和其他非字符串数据类型列显式视为字符串。我猜测任何这些列的32个字符应该足够了,只要注意不要意外截断任何超过32个字符的列。

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

您可能还需要处理NULL s

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

答案 1 :(得分:2)

如果您尝试连接列,则可能需要转换为数字的列:

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

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

答案 2 :(得分:1)

其中一列是数字,使用CONVERT()。

Bottomline,永远不依赖于隐式转换,CONVERT()所有非(N)CHAR /(N)VARCHAR值。