1

フィールドを に変換する必要がありますがfloatstring次の制限があります

  1. 小数点以下 6 桁以降の結果を切り捨てる必要がある
  2. 10 進数の後の末尾のゼロを切り捨てます

例えば:

  1. 17.666655942234 ==> 文字列「17.666655」に変換
  2. 17.6 ==> 「17.600000」ではなく、文字列「17.6」に変換
  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

#一時データ

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 に答える