首页 > 解决方案 > SQL Round 如果数字?

问题描述

(sql初学者)

我一直收到错误

'Error converting data type nvarchar to float.'

这是因为我试图用字符和整数对 nvarchar(10) 列进行四舍五入,显然它不能对字符进行四舍五入。(我不能用不同的数据类型创建两个单独的列,因为它们都需要在此列中)

我正在寻找一种方法来舍入 nvarchar 列中的数字,同时还返回字符

我一直在尝试 CAST/Converts 似乎没有任何效果

我也试过

CASE WHEN ISNUMERIC(Tbl1.Column1) = 1
THEN    cast(Round(Tbl1.Column1, 0) AS float)
ELSE Tbl1.Column1 END   AS 'Column1'

在选择语句中

我不知道还有什么可以解决这个问题!

此列中的示例数据将是

 8.1
 2
 9.0
 9.6
 A
 -
 5.3
 D
 E
 5.1
 -

标签: sqlsql-server

解决方案


我会去try_convert()而不是isnumeric()

COALESCE(CONVERT(VARCHAR(255), TRY_CONVERT(DECIMAL(10, 0), Tbl1.Column1)),Tbl1.Column1) as Column1

您的方法会出现转换问题,因为case表达式返回单个值。其中一个分支是数字的,因此返回类型是数字的——并且转换else失败。

then您可以通过在转换为浮点数后将子句转换为字符串来修复您的版本。


推荐阅读