sql - 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
-
解决方案
我会去try_convert()
而不是isnumeric()
:
COALESCE(CONVERT(VARCHAR(255), TRY_CONVERT(DECIMAL(10, 0), Tbl1.Column1)),Tbl1.Column1) as Column1
您的方法会出现转换问题,因为case
表达式返回单个值。其中一个分支是数字的,因此返回类型是数字的——并且转换else
失败。
then
您可以通过在转换为浮点数后将子句转换为字符串来修复您的版本。
推荐阅读
- python - Python:[...] 在列表末尾
- python - 如何更改 txt 文件 Python 中特定列中的行的值?
- visual-studio-code - 没有安装“cpp”文件的选择格式化程序
- python - 在 pyinstaller 生成的 exe 上找不到任何有价值的 Window 提供程序
- angularjs - AngularJS将带有参数的函数传递给事件指令
- z-index - 固定容器中绝对容器上的 Z-index
- filtering - 卡尔曼滤波器:测量噪声协方差矩阵和过程噪声如何帮助卡尔曼滤波器的工作,有人可以直观地解释一下吗?
- python - Cython 错误 ImportError:@rpath/libc++abi.1.dylib 库未在 conda Python 环境中加载
- php - 在 Codeigniter 查询中正确使用撇号和引号
- arrays - 字符串的未定义方法“推送”