我正在尝试根据其他列创建一个列,但它一直给我错误:
“错误将 varchar 转换为浮点数”我认为它试图添加而不是连接。
我的陈述如下所示:
select column1 + ' ' + column2 + ' ' as ColumnDesired
有任何想法吗?
我正在尝试根据其他列创建一个列,但它一直给我错误:
“错误将 varchar 转换为浮点数”我认为它试图添加而不是连接。
我的陈述如下所示:
select column1 + ' ' + column2 + ' ' as ColumnDesired
有任何想法吗?
好吧,如果这些列中的任何一个是数字的,那么由于数据类型的优先级,它正在尝试添加。例如,在数学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 ...
如果您尝试连接列,则可能需要转换为数字的列:
select cast(column1 as varchar(50)) + ' ' + column2 + ' ' as ColumnDesired
或者
select column1 + ' ' + cast(column2 as varchar(50)) + ' ' as ColumnDesired
其中一列是数字,使用 CONVERT()。
底线,永远不要依赖隐式转换,并且 CONVERT() 所有非 (N)CHAR/(N)VARCHAR 值。