尝试执行查询时出现以下错误
将nvarchar转换为数据类型numeric
的算术溢出错误
我已将问题缩小到包含的代码。我的问题是我不确定如何处理溢出错误。任何帮助,将不胜感激。谢谢。
avg(cast((Substring([Ice].Entry(5, UD03.Character01,';'),0,
CharIndex('|',[Ice].Entry(5, UD03.Character01,';'))))
as decimal(38,38))) as [Calculated_Markup]
答案 0 :(得分:1)
使用try_cast()
或try_convert()
:
avg(try_convert(decimal(38, 38),
Substring([Ice].Entry(5, UD03.Character01,';'), 1,
CharIndex('|', [Ice].Entry(5, UD03.Character01, ';')))) as [Calculated_Markup]
注意:我将0
更改为1
,因为子字符串处理从1开始。您可以使用LEFT()
更简洁地编写此代码:
avg(try_convert(decimal(38, 38),
left([Ice].Entry(5, UD03.Character01,';'),
CharIndex('|', [Ice].Entry(5, UD03.Character01, ';')))) as [Calculated_Markup]
注意:如果转换失败,则使用NULL
修复错误。
我会注意到decimal(38, 38)
有点不寻常 - 这是一个在小数点后只有38位的数字。通常在小数点之前有更多的数字,所以我希望更像decimal(38, 15)
。这将是之后的23位和之前的23位。