代码之家  ›  专栏  ›  技术社区  ›  SP1

Sql Server 2008中的十进制转换

  •  0
  • SP1  · 技术社区  · 6 年前

    我曾使用Try_Parse将nvarchar值转换为decimal,它在SQl Server 2012及以上版本中运行良好,但现在我必须在2008年支持相同的查询。查询正在抛出一个错误。有没有一种简单的方法可以在SQLServer2008中实现Try Parse。

    这似乎失败了

    select Cast('' as decimal)
    select Cast('22#' as decimal)
    

    如果施法失败,我能得到一个0值吗。

    谢谢

    2 回复  |  直到 6 年前
        1
  •  0
  •   Tab Alleman    6 年前

    一种方法是将基于集合的方法更改为逐行方法,并尝试使用代码。。拦网。

    另一种方法是编写一个使用TRY的UDF。。捕捉块并从基于集合的代码中调用它。

        2
  •  0
  •   UnhandledExcepSean    6 年前

    由于您没有解析功能,并且使用的是SQL Server 2008,因此这是一种可行的方法。效率不高,但选择不多。你可以试试看。。catch模式编写自己的函数来验证十进制数。

    DECLARE @Values TABLE(
            ID INT IDENTITY(1,1)
        ,   [Value] VARCHAR(20)
    )
    INSERT INTO @Values SELECT '22.1'
    INSERT INTO @Values SELECT '22.1 sdfsfds'
    
    DECLARE @GoodValues TABLE(ID INT)
    DECLARE @BadValues TABLE(ID INT)
    
    DECLARE @ID INT
    DECLARE @Value VARCHAR(20)
    DECLARE @ValueAsDecimal DECIMAL
    
    DECLARE tryparse_cursor CURSOR FOR   
    SELECT ID, [Value]  
    FROM @Values
    
    OPEN tryparse_cursor  
    
    FETCH NEXT FROM tryparse_cursor   
    INTO @ID, @Value  
    
    WHILE @@FETCH_STATUS = 0  
    BEGIN
        BEGIN TRY
            SET @ValueAsDecimal=CAST(@Value AS DECIMAL);
            INSERT INTO @GoodValues SELECT @ID;
        END TRY
        BEGIN CATCH
            INSERT INTO @BadValues SELECT @ID;
        END CATCH
    
        FETCH NEXT FROM tryparse_cursor   
        INTO @ID, @Value   
    END   
    CLOSE tryparse_cursor;  
    DEALLOCATE tryparse_cursor;  
    
    select * from @GoodValues
    select * from @BadValues