将nvarchar转换为十进制t-sql的问题

时间:2011-06-05 13:35:08

标签: tsql casting

我正在尝试将nvarchar转换为decimal (18,2),我收到以下消息:

  

Msg 8115,Level 16,State 6,Line 2
  将nvarchar转换为数据类型numeric的算术溢出错误。

CAST是:CAST(bm_onnet AS decimal(18,2)) as bm_onnet_corr, 它仅在值最多只有3位小数时起作用,对下面的值不起作用:

21.8333333333333333333333333333333333333

我该如何修改我的SELECT?

2 个答案:

答案 0 :(得分:7)

使用圆函数

例如

declare @v nvarchar(100) = '21.8333333333333333333333333333333333333'

select convert(decimal(18,2),round(@v,2))

选择看起来像这样

SELECT CAST(round(bm_onnet,2) AS decimal(18,2)) as bm_onnet_corr

答案 1 :(得分:0)

select 
        case when charindex('.',bm_onnet)) > = 2 then 
          convert(decimal(18,2),substring(bm_onnet,0,charindex('.',bm_onnet)+3))
        else 
          convert(decimal(18,2),bm_onnet)
        end

早上太早使用它。