首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何转换为varchar?

如何转换为varchar?
EN

Stack Overflow用户
提问于 2020-10-19 19:26:44
回答 3查看 57关注 0票数 0

我需要输出为varchar,数字保存为1或1.5....但现在我的号码被保存为1.00000。我不能更改表的设计,此字段可以是字符串或数字

因此,我尝试通过以下方式进行转换:

代码语言:javascript
运行
复制
SELECT CAST( ISNULL( TRY_CAST( a.field AS FLOAT) , 'NAME') AS VARCHAR(MAX)) FROM #TABLEA a

我的想法是,如果它是一个数字,那么它将转换为浮点型,否则它将用'NAME‘替换它。

但我得到的错误是:‘将数据类型varchar转换为浮点型时出错’如果我用一个数字替换'NAME‘,就不会有错误。

有没有人对这个问题有什么想法?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2020-10-19 19:29:20

ISNULL()有两个不同的参数,一个是float,另一个是字符串(常量'NAME')。这就是问题所在。

对于这一点,我建议使用case逻辑:

代码语言:javascript
运行
复制
SELECT (CASE WHEN TRY_CAST(a.field AS FLOAT) 
             THEN a.field ELSE 'NAME'
        END) 
FROM #TABLEA a;
票数 0
EN

Stack Overflow用户

发布于 2020-10-19 19:39:11

您可以尝试将转换后的浮点数转换回nvarchar;

代码语言:javascript
运行
复制
cast(TRY_CAST( a.field AS FLOAT) as nvarchar(50))
票数 0
EN

Stack Overflow用户

发布于 2020-10-19 19:59:47

请检查以下内容:

ISNULL: Returns the same type as check_expression.

并且您正在尝试使用两种不同的类型。我推荐使用COALESCE,但你也会遇到同样的问题,因为它是returns the data type of expression with the highest data type precedence,而FLOAT在data type precedence中是上层的VARCHAR。所以,我的两点意见是这样的:

代码语言:javascript
运行
复制
#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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64426367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档