Sybase将float转换为string

时间:2012-10-11 11:59:49

标签: sql sybase type-conversion

我需要将float中的字段转换为string,但有以下限制

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

    1. 17.666655942234 ==>转换为字符串“17.666655”
    2. 17.6 ==>转换为字符串“17.6”而不是“17.600000”
    3. 17.66 ==>转换为字符串“17.66”
    4. 我已经尝试了以下方法,但是由于某些上述要求而失败,也无法删除零。

      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
      

      我想,我的查询很复杂,应该存在一个更简单的版本。

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

1 个答案:

答案 0 :(得分: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