首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebird数据类型列字段不正确

Firebird数据类型列字段不正确
EN

Stack Overflow用户
提问于 2014-08-05 12:19:59
回答 2查看 1.3K关注 0票数 2

我正在尝试提取Firebird 1.5表的结构。我设法获取了数据,但是有一个字段显示了IBExpert数字和select是如何双倍显示的。

该字段为TR_VALOR。SQL返回十进制和IBExpert DDL数字。

返回select * from RDB$TYPES where RDB$TYPE = 27,这是: RDB$TYPE_NAME = Double。

为什么会有这种区别?这两种情况的结果是如何相同的?

SQL:

代码语言:javascript
复制
SELECT
    a.RDB$FIELD_NAME Coluna,
    RDB$TYPE_NAME Tipo,
    RDB$FIELD_LENGTH Tamanho,
    RDB$FIELD_SCALE Escala,
    b.*
FROM
    RDB$RELATION_FIELDS a
    JOIN RDB$FIELDS b ON  b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE
    inner join RDB$TYPES c on c.RDB$TYPE = b.RDB$FIELD_TYPE

WHERE
    a.RDB$RELATION_NAME = 'TRANSACAO' and c.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'
order by
    a.RDB$FIELD_POSITION;

SQL结果:

IBExpert DDL:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-05 12:59:06

对于数字或十进制(基本上相同),这是系统表中的混乱之处。

如果sub_type为1,则定义为数字,如果为2,则定义为十进制。如果是0,但是小数位数为<> 0,则可以将其视为数字。如果子类型= 0,比例尺=0,则为原始双倍。

注意,类型也可以是7 (int16)、8 (int32)或16 (int64)。同样的规则适用于上面。

在创建此数据类型的新列时,Firebird试图以最小的本地数据类型来满足规范,因此这是int16、int32、int64和方言1中的double。

希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2014-08-05 13:07:15

你也应该分析RDB$FIELD_SUB_TYPE。值1表示数值,2-小数点.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25138694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档