TSQL int/int 溢出

TSQL int/int overflow

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

有问题的代码行:

convert(varchar(10), startPos.Distance / 1000)

导致以下错误

Msg 8115, Level 16, State 8, Procedure sp_report_select_trip_start_and_stop, Line 7 [Batch Start Line 2]
Arithmetic overflow error converting numeric to data type numeric.

Msg 232, Level 16, State 2, Procedure sp_report_select_trip_start_and_stop, Line 9 [Batch Start Line 2]
Arithmetic overflow error for type varchar, value = 931.785156.

那个数字明显比我的varchar长。如何除法、截断到小数点后一位再转换?

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

您可以使用 format

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

或者,

convert(varchar(10),cast(startPos.Distance/1000 as decimal(9,1)))

您不妨将round()也引入其中。例如

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

convert(varchar(10),cast(round(startPos.Distance/1000,1) as decimal(9,1)))