当前位置:  开发笔记 > 数据库 > 正文

SQL IsNumeric返回True但SQL报告的转换失败'

如何解决《SQLIsNumeric返回True但SQL报告的转换失败'》经验,为你挑选了2个好方法。

假设以下数据:

Column1 (data type: varchar(50))
--------
11.6
-1
1,000
10"    
Non-Numeric String

我有一个查询,它从此列中提取数据,并希望确定该值是否为数字,然后在我的查询中将其返回.所以我正在做以下事情

SELECT CASE
       WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN Replace(Column1, '"', '')
       ELSE 0
   END AS NumericValue

SQL正在报告:

将varchar值'11 .6'转换为数据类型int时转换失败.

为什么?我也试图强迫这个:

SELECT CASE
       WHEN IsNumeric(Replace(Column1, '"', '')) = 1 THEN cast(Replace(Column1, '"', '') AS float)
       ELSE 0
   END AS NumericValue

我得到了:

将数据类型varchar转换为float时出错.

Quassnoi.. 11

您需要用句点替换逗号:

CAST(REPLACE(column, ',', '.') AS FLOAT)

SQL Server输出使用locale定义的小数分隔符,但不会将CASTs中的句点除以数字类型之外的任何内容.



1> Quassnoi..:

您需要用句点替换逗号:

CAST(REPLACE(column, ',', '.') AS FLOAT)

SQL Server输出使用locale定义的小数分隔符,但不会将CASTs中的句点除以数字类型之外的任何内容.



2> Polina F...:

首先将字符串转换为money,然后将其转换为任何其他数字格式,因为money类型始终提供真正的数字字符串.那你永远不会看到错误.

在您的查询中尝试以下内容,您就会知道我在说什么.两者都将返回2345.5656.Money数据类型舍入到4个小数位,因此转换会导致舍入到4个小数位.

SELECT CAST('2,345.56556' as money), CAST('$2,345.56556' as money)

施放(施放('2,344'作为钱)作为浮动)将完美地工作或施放(施放('2,344'作为金钱)作为小数(7,2))也将起作用.

甚至施放(CAST('$ 2,345.56556'作为货币)作为int)将完美地将其四舍五入到最接近的整数.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有