首先,我需要提一下,我当前的sybase db版本是 Adaptive Server Enterprise 12.5.4 。我的目标是通过sybase转换函数将float数据类型转换为varchar
,以便concat
这些变量中的几种,格式化并以字符串类型存储。
不幸的是,事实并非如此。仅使用convert(varchar(20), float_var)
或cast()
函数无法正确返回精确值。
例如,......
declare @float_var float
begin
select @float_var =345.1237 --from table actually
select convert(varchar(20),@float_var) --return 345.1236999999
end
返回的错误字符串结果偶尔会有99999
或00001
后缀。
我尝试了许多功能,包括指定精度,但仍有几种情况不能正常工作。 sybase内部函数并不完全适用于它。
我认为这是使用Sybase DB时的一个普遍问题,但在serach中找不到答案。在我过去的经验中,Sybase存储过程gammer在遇到错误时总是在运行时和内部修复方面具有一定的容差。这个问题让我对Sybase如何在内部工作感到困惑。任何建议都会受到赞赏,提前谢谢。
答案 0 :(得分:2)
有两种可能的解决方案。
首先,让我们先尝试将float转换为十进制,然后转换为varchar。
select cast(cast(@float_var as decimal(13,4)) as varchar)
或者,这是我的ASE内存可能会让我失望的地方,就是这样使用STR函数:
Select ltrim(str(@float_var, 25, 5))
您必须将输出TRIM作为STR函数填充结果左侧的空格
答案 1 :(得分:1)
这对我有用:
declare @float_var float
begin
select @float_var = 96.332
select cast(cast(@float_var as decimal(13,4)) as varchar) -- Returns 96.3320
end
declare @float_var float
begin
select @float_var = 345.1237
select cast(cast(@float_var as decimal(13,4)) as varchar) -- Returns 345.1237
end