TSQL int/int溢出

TSQL int/int溢出,tsql,sql-server-2008-r2,type-conversion,number-formatting,Tsql,Sql Server 2008 R2,Type Conversion,Number Formatting,我有一个名为Odo的列,其中包含行程中的米数。我通常会除以1000来显示公里数 有关代码行: convert(varchar(10), startPos.Distance / 1000) 导致以下错误 Msg 8115,16级,状态8,程序sp_报告_选择_跳闸_启动_和_停止,第7行[批次启动第2行] 将数值转换为数据类型数值时出现算术溢出错误 Msg 232,16级,状态2,程序sp_报告_选择_跳闸_启动_和_停止,第9行[批次启动第2行] varchar类型的算术溢出错误,值=931.

我有一个名为
Odo
的列,其中包含行程中的米数。我通常会除以1000来显示公里数

有关代码行:

convert(varchar(10), startPos.Distance / 1000)
导致以下错误

Msg 8115,16级,状态8,程序sp_报告_选择_跳闸_启动_和_停止,第7行[批次启动第2行]
将数值转换为数据类型数值时出现算术溢出错误

Msg 232,16级,状态2,程序sp_报告_选择_跳闸_启动_和_停止,第9行[批次启动第2行]
varchar类型的算术溢出错误,值=931.785156

这个数字显然比我的
varchar
长。如何除法、截断到小数点后1位,然后进行转换

编辑:SQL Server 2008 R2,因此
格式()
不可用

您可以使用

或者

您也可以将
round()
引入其中。e、 g

format(round(startPos.Distance/1000,1),  '#,###,###.#')


圆形例如
round(931.785156,1)
或使用
format()
确定,距离是一个浮点数,而不是预期的整数。旁注:存储过程不应使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!2008r2所以没有可用的format()函数使用cast或convert获得相同的结果。“相同的结果”。。。为了什么?我道歉。我在一个干净的窗口中再次测试,最后一个选项(使用round())非常完美。
convert(varchar(10),cast(startPos.Distance/1000 as decimal(9,1)))
format(round(startPos.Distance/1000,1),  '#,###,###.#')
convert(varchar(10),cast(round(startPos.Distance/1000,1) as decimal(9,1)))