0

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

“错误将 varchar 转换为浮点数”我认为它试图添加而不是连接。

我的陈述如下所示:

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

有任何想法吗?

4

3 回答 3

3

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

因此,请使用CONVERT确保所有数字和其他非字符串数据类型列都被明确视为字符串。我猜 32 个字符对于这些列中的任何一个都应该足够了,只是要小心不要意外截断任何超过 32 个字符的列。

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

您可能还需要处理NULLs

SELECT ColumnDesired = COALESCE(CONVERT(VARCHAR(32), column1), '')
       + COALESCE(CONVERT(VARCHAR(32), column2), '')
FROM ...
于 2013-03-11T21:01:22.497 回答
2

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

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

或者

select column1 + ' ' +  cast(column2 as varchar(50)) + ' ' as ColumnDesired 
于 2013-03-11T21:03:03.830 回答
1

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

底线,永远不要依赖隐式转换,并且 CONVERT() 所有非 (N)CHAR/(N)VARCHAR 值。

于 2013-03-11T21:07:58.917 回答