Just a test snippet of various methods for fun and giggles.
declare @test table (id int identity(1,1), num decimal(20,3));
insert into @test (num) values
(1.444)
,(1.888)
,(123456.111)
,(123456.999);
select num
, convert(decimal(18,1), round(num,1,1)) as unrounded -- best method
, cast({fn truncate(num, 1)} as decimal(18,1)) as odbc_truncated
, convert(decimal(18,1), num-num%0.1) as modulusced
, convert(decimal(18,1), floor(num*10)/10.0) as floored
, convert(decimal(18,1), round(num-0.05,1)) as rounderood
, convert(decimal(18,1), stuff(num,charindex('.',num)+2,1,'0')) as stuffed
, convert(decimal(18,1), left(num,charindex('.',num)+1)) as lefted
, convert(decimal(18,1), substring(convert(varchar(20),num),1,charindex('.',num)+1)) as substringed
from @test;
GO
num | unrounded | odbc_truncated | modulusced | floored | rounderood | stuffed | lefted | substringed
---------: | --------: | -------------: | ---------: | -------: | ---------: | -------: | -------: | ----------:
1.444 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4
1.888 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8
123456.111 | 123456.1 | 123456.1 | 123456.1 | 123456.1 | 123456.1 | 123456.1 | 123456.1 | 123456.1
123456.999 | 123456.9 | 123456.9 | 123456.9 | 123456.9 | 123456.9 | 123456.9 | 123456.9 | 123456.9