【问题标题】:Problem converting nvarchar to decimal t-sql将 nvarchar 转换为十进制 t-sql 的问题
【发布时间】:2011-06-05 13:35:08
【问题描述】:

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

消息 8115,第 16 级,状态 6,第 2 行
将 nvarchar 转换为数字数据类型时出现算术溢出错误。

CAST 是:CAST(bm_onnet AS decimal(18,2)) as bm_onnet_corr, 仅当该值最多只有 3 位小数时才有效,不适用于以下值:

21.8333333333333333333333333333333333333

我应该如何修改我的 SELECT?

【问题讨论】:

    标签: tsql casting


    【解决方案1】:

    使用圆函数

    例子

    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
    

    【讨论】:

    • 这可以在 sql 程序中工作,我只需要一个简单选择的答案,无论如何谢谢!
    • +1。 CAST(CAST(bm_onnet AS float) AS decimal(18, 2)) 也可以。
    【解决方案2】:
    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
    

    早上太早改用这个。

    【讨论】:

    • 我应该弹出打开的 sql server 它可以为我省去很多麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    相关资源
    最近更新 更多