Sql Sybase将问题从float转换为varchar
首先,我需要提到我当前的sybase db版本是Adaptive Server Enterprise 12.5.4。我的目标是通过sybase convert函数将浮点数据类型转换为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
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。。。