1

我需要将字段转换floatstring,但有以下限制

  1. 需要截断小数点后6位的结果
  2. 截断小数点后的任何尾随零

例如:

  1. 17.666655942234 ==> 转换为字符串“17.666655”
  2. 17.6 ==> 转换为字符串“17.6”而不是“17.600000”
  3. 17.66 ==> 转换为字符串“17.66”

我尝试了以下方法,但未能满足上述某些要求,也无法删除零。

select 
CASE WHEN RIGHT(convert(VARCHAR, cast(cast(product_price as DECIMAL(28,6))  as float)),2) = ".0"
THEN LEFT(convert(VARCHAR, product_price),(CHAR_LENGTH(convert(VARCHAR(15), product_price))-2))
ELSE substring( convert(VARCHAR, cast(cast(product_price as DECIMAL(28,7))  as float)),1, charindex(".",convert(VARCHAR, cast(cast(product_price as DECIMAL(28,7))  as float)))+6) END 
from #TEMP

#TEMP 数据

id | product_price
-------------------
1  | 17.3435302323
2  | 17.700000000
3  | 17.60
4  | 19.0

我想,我已经把查询复杂化了,应该有一个更简单的版本。

我知道这可以用高级语言轻松处理,但如果这可以很容易地容纳在查询本身中,那么请告诉我。

4

1 回答 1

1

我不确定是否有更简单的方法可以在 sybase 上做到这一点。

这个例子对我有用

declare @val float
declare @val2 float
select @val = 17.666655942234 
select @val2 = 17.66
select substring(convert(varchar(30),@val), 1, patindex('%.%',convert(varchar(30),@val)))+reverse(convert(varchar(30),convert(int,reverse(substring(convert(varchar(30),@val), patindex('%.%',convert(varchar(30),@val))+1,6))))) as Val,
       substring(convert(varchar(30),@val2), 1, patindex('%.%',convert(varchar(30),@val2)))+reverse(convert(varchar(30),convert(int,reverse(substring(convert(varchar(30),@val2), patindex('%.%',convert(varchar(30),@val2))+1,6))))) as Val2

解决方案varchar(15)

declare @val numeric(10,5)
declare @val2 numeric(10,5)
select @val = convert(numeric(10,5),17.666655942234)
select @val2 = convert(numeric(10,5),17.66)
select convert(varchar(15),substring(convert(varchar(15),@val), 1, patindex('%.%',convert(varchar(15),@val)))+reverse(convert(varchar(15),convert(int,reverse(substring(convert(varchar(15),@val), patindex('%.%',convert(varchar(15),@val))+1,6)))))) as Val,
       convert(varchar(15),substring(convert(varchar(15),@val2), 1, patindex('%.%',convert(varchar(15),@val2)))+reverse(convert(varchar(15),convert(int,reverse(substring(convert(varchar(15),@val2), patindex('%.%',convert(varchar(15),@val2))+1,6)))))) as Val2
于 2012-10-11T13:42:09.363 回答