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)))
我有一个名为 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)))