从带小数点的字符串转换为NUMERIC时如何避免舍入整数?

时间:2019-01-03 06:33:25

标签: database sql-server-2008 integer

我试图将带小数点的字符串转换为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 enter image description here enter image description here

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

尝试一下:

DECLARE @val varchar(10);
SET @val = 454.6;

select  Cast([decimal] as int) from
(select convert(decimal(10,4), @val) as decimal) as a