Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Sybase将问题从float转换为varchar_Sql_Stored Procedures_Sap Ase - Fatal编程技术网

Sql Sybase将问题从float转换为varchar

Sql Sybase将问题从float转换为varchar,sql,stored-procedures,sap-ase,Sql,Stored Procedures,Sap Ase,首先,我需要提到我当前的sybase db版本是Adaptive Server Enterprise 12.5.4。我的目标是通过sybase convert函数将浮点数据类型转换为varchar,以便concat这类变量中的几种,以字符串类型格式化和存储 不幸的是,情况并非如此。仅使用convert(varchar(20)、float\u var)或cast()函数无法正确返回精确值 例如 declare @float_var float begin select @float_var

首先,我需要提到我当前的sybase db版本是Adaptive Server Enterprise 12.5.4。我的目标是通过sybase convert函数将浮点数据类型转换为
varchar
,以便
concat
这类变量中的几种,以字符串类型格式化和存储

不幸的是,情况并非如此。仅使用
convert(varchar(20)、float\u 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的内部工作方式感到困惑。如果您有任何建议,我们将不胜感激。对此,有几种可能的解决方案

首先,让我们先尝试将浮点转换为十进制,然后再转换为varchar

select cast(cast(@float_var as decimal(13,4)) as varchar)
或者,我的ASE内存可能会有点不足,使用STR函数如下:

Select ltrim(str(@float_var, 25, 5))
当STR函数在结果左侧填充空格时,必须修剪输出

这对我很有用:

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

考虑到float数据类型的预先设定,我尝试使用case#1 cast(cast(@float_var as decimal(38,15))作为varchar),但仍然有几个数字无法通过测试,例如96.332返回96.331999999994您确切想要的结果是什么?感谢您的及时响应。执行此操作的主要目的是将浮点数据类型转换为字符串数据类型,而不会丢失精度,或者换句话说,在选择视图中显示时,此浮点类型列的值应与其转换的字符串完全相等。我需要一个通用函数来覆盖这一点(从float到varchar),而不会丢失任何精度或比例@SQLGuruYeah,引用函数decimal(精度,刻度),当前精度=13,刻度=4,如果刻度高于4,这是硬代码值。Execuse me,还有一个问题,我是否最好研究表的列类型的最大刻度,以及此十进制函数的此刻度的硬代码,以满足转换时拟合此列中每个精确值的要求?请注意,此实际浮点值(定义defalut float数据类型)来自上游系统,在访问数据时,我很难评估最大规模或精度。所以这就是为什么我需要一个泛型函数来覆盖所有可能的情况。是的,我会使用等级的最高值。。。为什么不简单地使用该列的现有数据类型定义呢。然后转换为varchar。。。