首页 > 解决方案 > 从带小数点的字符串转换为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 时转换失败。

如果有人对此有想法,请告诉我,

谢谢, Matheswaran.S 在此处输入图像描述 在此处输入图像描述

标签: databasesql-server-2008integer

解决方案


您可以使用 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

推荐阅读