【问题标题】:Firebird - select field named startFirebird - 选择名为 start 的字段
【发布时间】:2014-07-26 10:53:04
【问题描述】:

我遇到了一个奇怪的问题。客户在 FirebirdSQL 中命名了一个字段start。现在我无法选择此字段:

select t.start from table t

给我错误:Invalid token

知道如何选择这个字段吗?

【问题讨论】:

  • select "start" from table ?
  • 这也不起作用。它给了我一个常量start
  • 这个 SO 答案可能有用:1800841/using-reserved-word-timestamp-as-a-field-name-firebird-2-5。基本上,还要检查列的字母大小写。
  • @AlexK。 Firebird 确​​实有引用标识符,但 lueda 可能使用已弃用的旧方言 1 而不是方言 3。
  • @lueda 据我所知不是这样,但我不希望您能够在不引用任何一个的情况下创建带有保留字的名称(除非这些字后来被保留)。但说真的:除非你有充分的理由坚持使用方言 1(我唯一知道的是它在乘法和除法中使用 NUMERIC/DECIMAL 计算的方式),否则我建议迁移。

标签: sql firebird


【解决方案1】:

start 是 Firebird 中的保留字,因此需要引用。 Firebird 中的引号是双引号。所以你需要使用:

select t."start" from "table" t

请注意,我也引用了 table,因为它也是保留字。引号使名称区分大小写,因此您可能需要使用"START""TABLE"

在您的 cmets 中,您提到引用会产生一个恒定值 'table'。这意味着您正在使用方言 1,即 Firebird 已弃用(和遗留)的方言。这种传统方言不能引用对象名称,双引号用于字符串文字(在 SQL 标准单引号旁边)。您的数据库是方言 1 数据库,或者您在连接库中指定了错误的连接方言。

如果您的数据库实际上是方言 3,解决这个问题就像指定连接方言 3(或 0 以根据数据库方言自动选择)一样简单。但是,如果您的数据库是方言 1 数据库,则需要迁移到方言 3 才能解决此问题。

如果这只是为了尝试:确保创建一个方言 3 数据库(对于大多数工具,这是默认设置)。

如何判断数据库方言

要确定数据库方言,可以使用gstat tool

gstat mydatabase.fdb -header

在最近的 Firebird 版本中,您还可以查询 MON$DATABASE 监控表。大多数查询工具还允许您查看数据库属性。

如何从方言 1 迁移到方言 3

我觉得写在这里太复杂了(我自己从来没有这样做过,因为它在几年前被认为已被弃用)。然而,Interbase 6.0 Getting Started(可从Firebird: Reference Manuals(页面末尾)获得)描述了迁移的基本过程,我相信通过谷歌搜索可以找到一些页面。

【讨论】:

  • 问题是客户使用的是旧版本的Firebird 1.5。这个版本好像没有保留字start。所以我安装了这个版本,我的选择没有问题。无论如何,我将您的答案标记为正确。
  • @lueda 看起来 start 自 Firebird 2.1 以来已被保留,请参阅 here
猜你喜欢
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多