34,590
社区成员
发帖
与我相关
我的任务
分享
if object_id('tempdb.dbo.#a') is not null drop table #a
go
create table #a (id numeric(8,6))
insert into #a
select 14.520000 union all
select 14.500000 union all
select 14.000000
select cast(id as float) from #a
/*
14.52
14.5
14
*/
--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (id numeric(8,6))
insert into #tb
select 14.520000 union all
select 14.500000 union all
select 14.000000
select id=reverse(case when cast(reverse(cast(id as varchar(30)))as decimal(18,6)) <1
then right(reverse(cast(id as varchar(30))),len(reverse(cast(id as varchar(30))))-charindex('.',reverse(cast(id as varchar(30)))))
else right(reverse(cast(id as varchar(30))),len(reverse(cast(id as varchar(30))))-patindex('%[^0]%',reverse(cast(id as varchar(30))))+1)
end )
from #tb
id
------------------------------
14.52
14.5
14
(3 行受影响)
declare @num float
set @num=14.520000
select CAST(@num as varchar(20))
set @num=14.500000
select CAST(@num as varchar(20))
set @num=14.000000
select CAST(@num as varchar(20))
cast(列 as float)
DECLARE @T TABLE(COL1 NUMERIC(19,3))
INSERT INTO @T
SELECT 12.000 UNION ALL
SELECT 10.300 UNION ALL
SELECT 9.005
SELECT COL1
,CAST(COL1 AS FLOAT)
,CASE WHEN CAST(COL1 AS VARCHAR(30)) LIKE '%.%' THEN
REVERSE(STUFF(REVERSE(CAST(COL1 AS VARCHAR(30))),1,PATINDEX('%[^0]%',REVERSE(CAST(COL1 AS VARCHAR(30))))-1,''))
ELSE
CAST(COL1 AS VARCHAR(30))
END
FROM @T