Sybase将问题从float转换为varchar

时间:2013-02-01 02:26:00

标签: sql stored-procedures sybase-ase

首先,我需要提一下,我当前的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

返回的错误字符串结果偶尔会有9999900001后缀。

我尝试了许多功能,包括指定精度,但仍有几种情况不能正常工作。 sybase内部函数并不完全适用于它。

我认为这是使用Sybase DB时的一个普遍问题,但在serach中找不到答案。在我过去的经验中,Sybase存储过程gammer在遇到错误时总是在运行时和内部修复方面具有一定的容差。这个问题让我对Sybase如何在内部工作感到困惑。任何建议都会受到赞赏,提前谢谢。

2 个答案:

答案 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