我需要输出为varchar,数字保存为1或1.5....但现在我的号码被保存为1.00000。我不能更改表的设计,此字段可以是字符串或数字
因此,我尝试通过以下方式进行转换:
SELECT CAST( ISNULL( TRY_CAST( a.field AS FLOAT) , 'NAME') AS VARCHAR(MAX)) FROM #TABLEA a
我的想法是,如果它是一个数字,那么它将转换为浮点型,否则它将用'NAME‘替换它。
但我得到的错误是:‘将数据类型varchar转换为浮点型时出错’如果我用一个数字替换'NAME‘,就不会有错误。
有没有人对这个问题有什么想法?谢谢!
发布于 2020-10-19 19:29:20
ISNULL()
有两个不同的参数,一个是float
,另一个是字符串(常量'NAME'
)。这就是问题所在。
对于这一点,我建议使用case
逻辑:
SELECT (CASE WHEN TRY_CAST(a.field AS FLOAT)
THEN a.field ELSE 'NAME'
END)
FROM #TABLEA a;
发布于 2020-10-19 19:39:11
您可以尝试将转换后的浮点数转换回nvarchar;
cast(TRY_CAST( a.field AS FLOAT) as nvarchar(50))
发布于 2020-10-19 19:59:47
请检查以下内容:
并且您正在尝试使用两种不同的类型。我推荐使用COALESCE,但你也会遇到同样的问题,因为它是returns the data type of expression with the highest data type precedence,而FLOAT在data type precedence中是上层的VARCHAR。所以,我的两点意见是这样的:
#If you can cast it, then use that field. Use "Name" otherwise.
SELECT (CASE WHEN TRY_CAST(a.field AS FLOAT) IS NOT NULL
THEN a.field ELSE 'NAME'
END)
FROM #TABLEA a;
https://stackoverflow.com/questions/64426367
复制相似问题