将 varchar 转换为数字并仅显示数值时转换失败

Posted

技术标签:

【中文标题】将 varchar 转换为数字并仅显示数值时转换失败【英文标题】:Conversion failed when converting the varchar to numeric and displaying numeric values only 【发布时间】:2021-09-03 14:36:51 【问题描述】:
select * 
    ,iif (DAYSS>=1, DAYSS, 'Out of Stock') as NEWDA
    from TABLE3

出错了

将数据类型 varchar 转换为数字。

当尝试将 numeric 转换为 varchar 但这也是一个错误

use case when isnumeric (DAYSS) >=0 then CAST(DAYSS as varchar) 

将 varchar 值“7.350000”转换为数据类型 int 时转换失败。

【问题讨论】:

标记您真正使用的RDBMS。 SQL Server 和 mysql 完全不同。但是,错误告诉您问题,'7.350000' 不是有效的int 值;整数没有小数位。 如果这是 SQL Server,您可能需要查看 try_convert 【参考方案1】:

我强烈推荐case 而不是iif(),但这是同样的问题。表达式引用单一类型的单一值。如果一个分支(“then”)是一个数字,另一个是一个字符串(“else”),那么结果就是一个数字。

所以,将数字转换为字符串:

select t3.*,
       (case when DAYSS >= 1 then cast(DAYSS as varchar(255))
             else 'Out of Stock'
        end) as NEWDA
from TABLE3 t3;

【讨论】:

以上是关于将 varchar 转换为数字并仅显示数值时转换失败的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何将varchar型转换成int型

在SQL语句里面如何将字符型转换成数字型?

SQL Server 2012 将数据类型 varchar 转换为数字时出错

SQL中如何将数值格式的20110801(2011年8月01日)转换为日期格式的201108或者2011-08?

Varchar 值到数值分类

在存储过程中将 varchar 转换为数字时出错