MS SQL Server里的一个字段类型为numeric(18,7),转换为字段串时会是这样1.3200000,怎么可以在SELECT语句里把后面的零给去掉?

  • 主题发起人 主题发起人 am2001
  • 开始时间 开始时间
A

am2001

Unregistered / Unconfirmed
GUEST, unregistred user!
MS SQL Server里的一个字段类型为numeric(18,7),转换为字段串时会是这样1.3200000,怎么可以在SELECT语句里把后面的零给去掉? ( 积分: 50 )<br />我也想过用字符来存1.32,可用字符后排序不好
 
我也想过用字符来存1.32,可用字符后排序不好
 
SELECT CONVERT(DECIMAL(13, 2), 1.3200000)
 
小数位数不确定的
 
刚想到一个做法
select replace(rtrim(ltrim(replace(1.3020000,'0',' '))),' ','0')
先把0换成空格,再去前后空格,再把空格换成0
 
round四舍五入,留二位小数点。
 
是你要的吧?
' Select 材种=Ltrim(Rtrim(材种)),流水号=Ltrim(Rtrim(流水号)),材长,径级,等级,材积=Round(材积,4) From MCK '
 
如果数据是
1.3020000
5.6300000
12.1000000
9.0000000
那出来的结果要这样
1.302
5.63
12.1
9
所以说小数位数是不确定的
 
--写个函数吧
CREATE FUNCTION dbo.uf_TrimZero
(
@Numeric NUMERIC(18,7)
)
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @ResultStr VARCHAR(20)
SELECT @ResultStr=CAST(@Numeric AS VARCHAR(20))
WHILE RIGHT(@ResultStr,1)='0'
SELECT @ResultStr=LEFT(@ResultStr,LEN(@ResultStr)-1)
RETURN @ResultStr
END
--调用:
--SELECT dbo.uf_TrimZero(1.3020000)
 
1、在保存时,先转换成数值,再转换成字符串不就行了;
2、把该字段设成“float”不也行了么?
 
用字符串保存从小到大排序时不好,会出现
4.2
5.3
51.23
6.5
这样的排序,长、宽、高三个字段,在界面上显示时要2.6*12.3*5这样显示,数据库时我也同时用字符串保存了这个,但有时会要按长*宽等来显示,不要高,所以就要把把数值转成字符串显示
用Float会出现1.699999999999这样
select replace(rtrim(ltrim(replace(1.3020000,'0',' '))),' ','0')
这个法子刚试了可以做到的
 
先转换成int再转换成char
 
也不行的吧,后面不确定的小数位怎么处理呢?
用自定义函数是可以做到的
不知道还有没有更好的方法
 
在语句中强制数据类型转换,转换成 float 类型的就可以了,
 
select 中转成float也会出现1.69999999的
 
出来就出来呗,给它
' Select 材积=Round(材积,4) From MCK '
不就成了
 
小数位数不确定的
 
其实你不需要在SELECT里就要将它处理掉,你可以在显示给用户的时候处理
在数据集里设置这个字段的DISPLAYFORMAT为#.#######
 
To hongxing_dl:
9494
 
后退
顶部