sql - Sybase 将问题从 float 转换为 varchar

标签 sql stored-procedures sap-ase

首先,我需要提及的是,我当前的 sybase 数据库版本是 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 时的一个普遍问题,但在搜索中发现的答案很少。根据我过去的经验,Sybase存储过程玩家总是在运行时具有一定的容忍度,并在遇到错误时进行内部修复。这个问题让我很困惑 Sybase 内部是如何工作的。任何建议将不胜感激,提前致谢。

最佳答案

对此有几种可能的解决方案。

首先,我们尝试将 float 转换为十进制,然后再转换为 varchar。

select cast(cast(@float_var as decimal(13,4)) as varchar)

或者,这就是我的 ASE 内存可能会让我有点失败的地方,就是使用 STR 函数,如下所示:

Select ltrim(str(@float_var, 25, 5))

您必须将输出修剪为 STR 函数,在结果左侧填充空格

关于sql - Sybase 将问题从 float 转换为 varchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14638758/

相关文章:

php - 通过PHP调用MySQL存储过程报错

php - 使用 PHP 脚本从 Postgres 迁移到 Sybase

java - 如何在插入行之前在 Sybase SQL 中生成 ID

sql - 如何比较一行中的重叠值?

android - 来自 Android 应用程序的 MVC Web API 调用

php - if语句在查询中?

sql - 通过 SQL Developer 连接时出现 ora-12505 错误

java - 使用 JDBC 调用 sql server 存储过程时出现 java.lang.NullPointerException

mysql - mySQL 中的存储过程出错

sql - 为什么计数在空表上不返回 0