简单sql,小数转成指定格式的字符字段怎样转换???

lantianhf888 2016-12-06 01:14:40

数据库后台表T1字段danjia是浮点型的,想把浮点型转换为字符型,怎样转(小数点后有三位及三位以上不自动补0,小数点后小于2位的自动补足2位,小数点前空的用0补)

台存danjia存储内容如下

.902
.3
.5
100.5

danjia转换后如下,要转成字符型的作为另一个字段使用

0.902
0.30
0.50
100.50




...全文
610 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_35289351 2016-12-08
  • 打赏
  • 举报
回复
楼主,为什么要转换啊,这样计算很好啊。 是不是因为 小数点前面的0没了,才转换的。。如 .50
中国风 2016-12-07
  • 打赏
  • 举报
回复
0.30 0.50 100.50 ----------- 转换为字符应该保留原格式,如果要二位小数应该所有数据都为二位小数 用 ltrim(str(列,18,2))
卖水果的net 版主 2016-12-07
  • 打赏
  • 举报
回复

create table test(id decimal(18,3))
go
insert into test values(.902),(.3),(.5),(100.5)
go
select 
    case 
    when right(ltrim(id),1) = '0' 
        then substring(ltrim(id),1,len(ltrim(id))-1) 
    else 
        ltrim(id) 
    end result
from test
go
drop table test 
go

(4 行受影响)
result
-----------------------------------------
0.902
0.30
0.50
100.50

(4 行受影响)


中国风 2016-12-07
  • 打赏
  • 举报
回复
CONVERT指定兼容格式就行了如:3/负数...
e.g.
with t1(c1) as(
select convert(float, 0.902) union all
select 0.3 union all
select 0.5 union all
select 100.5)
SELECT CONVERT(VARCHAR(10),c1,3) FROM t1
/*
(无列名)
0.902
0.3
0.5
100.5
*/
Tiger_Zhao 2016-12-07
  • 打赏
  • 举报
回复
显示格式应该由前台程序处理,表格控件只要设个列格式就能简单达成目标。
你用后台SQL处理不仅麻烦,而且影响效率。
zbdzjx 2016-12-07
  • 打赏
  • 举报
回复
引用 5 楼 lantianhf888 的回复:
楼上的还是都没有解决,结果不对,求解答!

哪个值不对?
  • 打赏
  • 举报
回复
你看这个 行不行

  CREATE TABLE #TT1 (MM FLOAT)
  INSERT INTO #TT1(MM) VALUES ('.902'),('.3'),('.5'),('100.5'),('100.507')
  SELECT MM,WZ=LEN(MM)-CHARINDEX('.',MM),CASE WHEN (LEN(MM)-CHARINDEX('.',MM))<3 THEN 
  CAST(MM AS VARCHAR(200))+LEFT('00',2-(LEN(MM)-CHARINDEX('.',MM))) ELSE   CAST(MM AS VARCHAR(200)) END FROM #TT1

/
MM	WZ	(无列名)
0.902	3	0.902
0.3	1	0.30
0.5	1	0.50
100.5	1	100.50
100.507	3	100.507
/
lantianhf888 2016-12-07
  • 打赏
  • 举报
回复
楼上的还是都没有解决,结果不对,求解答!
zbdzjx 2016-12-06
  • 打赏
  • 举报
回复
with t1(c1) as(
select convert(float, 0.902) union all
select 0.3 union all
select 0.5 union all
select 100.5)
select c1
, case
when c1*100- FLOOR(c1*100) =0 then convert(varchar,convert(decimal(18,2),c1))
else convert(varchar, c1)
end
from t1
lantianhf888 2016-12-06
  • 打赏
  • 举报
回复
楼上还是没有解决,需要判断最后一位非0的数是第几位,才能得出吧,求解答! 上面的数据应该是这个才对! /* 位数 0.902 0.30 0.50 100.50 */
0与1之间 2016-12-06
  • 打赏
  • 举报
回复
cast(danjia as numeric(18,3))
Ekun_sky 2016-12-06
  • 打赏
  • 举报
回复
with t1(danjia) as(
select 0.902 union all
select 0.3 union all
select 0.5 union all
select 100.5)



select convert(decimal(18,3),danjia) as 位数 from t1

/*
位数
0.902
0.300
0.500
100.500


*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧