我正在尝试根据其他列创建一个列,但它一直给我错误:
“将varchar转换为float时出错”我认为它试图添加而不是连接。
我的陈述如下:
select column1 + ' ' + column2 + ' ' as ColumnDesired
任何想法?
答案 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值。