database - 从带小数点的字符串转换为NUMERIC时如何避免舍入整数?
问题描述
我试图从带小数点的字符串转换为 NUMERIC。在转换它时,我得到整数值作为四舍五入。我不想将该整数作为舍入值。
案例1: 例如:
DECLARE @val varchar(10);
SET @val = 454.6;
SELECT (CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1 THEN
CAST( CAST( @val AS VARCHAR(MAX) ) AS NUMERIC ) ELSE NULL END)
如果我运行它,我将得到四舍五入的整数值455。
但是通过避免舍入整数,我需要将值设为454 。
案例2:
如果我将此值从字符串转换为整数,我会遇到如下问题:
错误:SQLSTATE[22018]:[Microsoft][SQL Server Native Client 11.0][SQL Server]将 varchar 值“454.6”转换为数据类型 int 时转换失败。
如果有人对此有想法,请告诉我,
解决方案
您可以使用 FLOOR 函数将 Decimal 的整数部分捕获为:
DECLARE @val varchar(10);
SET @val = 454.6;
SELECT
CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1
THEN FLOOR(CAST( CAST( @val AS VARCHAR(MAX) ) AS DECIMAL(18, 3) ) )
ELSE NULL END
或者......这种方式是一样的,而且更紧凑一点:
DECLARE @val varchar(10) = '454.6';
SELECT
CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1
THEN FLOOR(CAST(@val AS DECIMAL(18, 3) ) )
ELSE NULL END
推荐阅读
- r - 将匹配函数重复应用于 R 中的多个数据帧
- java - 获取数据库生成的多个值从一个 jsp 下拉到另一个
- r - 列表中的数值在 R 的 lapply 函数中没有正确匹配?
- html - 强制滚动条超出弹性框
- r - 在R中拆分Unicode字符的字符串
- laravel - Laravel eloquent apply whereHas on the latest record of hasMany 关系
- php - Laravel 验证自定义消息未显示
- html - justify-content 和 align content 的默认值是什么?
- java - Java - 优化比较器操作以对 POJO 列表进行排序
- python - 将额外参数传递给自定义操作