【问题标题】:Check for is numeric in Firebird database检查 Firebird 数据库中的数字
【发布时间】:2021-03-16 17:51:05
【问题描述】:

如何在 Firebird 数据库中检查字段的值是否为数字?这似乎是一个简单的问题,但我在 FreeUDFLib 或标准 Firebird 库中找不到任何东西。下面是我在 SQL Server 中的做法。

Select field
from table
where isnumeric(field) = 1

一些研究让我“类似于”。这应该可行,但会引发错误:

select field
from table
where field SIMILAR TO '[0-9]+'

{"动态 SQL 错误" & vbCrLf & "SQL 错误代码 = -104" & vbCrLf & "令牌未知 -" & vbCrLf & "SIMILAR"}

【问题讨论】:

  • 你能告诉我们一个实际的查询和文字错误信息吗?也许反对rdb$database 使用 SIMILAR TO ?
  • 我正在使用 Visual Studio 连接到我的项目中的 firebird 数据库和 FirebirdSql.Data.FirebirdClient 引用。我在字符串生成器中创建一个 sql 语句,然后以这种方式连接到数据库。我宁愿不透露字段名称。我的伪代码显示了我正在查询的内容,引用的文本是我得到的错误消息。
  • 什么是 Firebird 版本?使用 TraceAPI 从服务器角度查看查询。 "c:\Program Files\Firebird\Firebird_2_5\bin\fbtracemgr.exe" 或 IBExpert 或 FBProfiler.sf.net // 将字段名替换为 AAAA、BBBB、CCCC 不同的字母以获得不同的令牌。查询告知 FB 版本 - dbfiddle.uk/?rdbms=firebird_3.0
  • 还有什么是数据库格式? select MON$ODS_MAJOR, MON$ODS_MINOR from MON$DATABASEfirebirdsql.org/file/documentation/html/en/refdocs/fblangref25/…
  • SIMILAR TO 是在 Firebird 2.5 中引入的,这表明您使用的是旧版本。

标签: firebird firebird-.net-provider


【解决方案1】:

Firebird 没有内置函数来执行 SQL Server 中的 isnumeric 所做的事情。在 Firebird 3 中,您可以在 PSQL 中自己构建一个,例如:

create function isnumeric(val varchar(30))
  returns boolean
  deterministic
as
  declare dblval double precision;
begin
  dblval = cast(val as double precision);
  return true;
  when any do 
    return false;
end

关于similar to 的问题,它是在Firebird 2.5 中引入的,因此这表明您使用的是Firebird 2.1 或更早版本。在这种情况下,真的是时候更新了。 Firebird 2.5 及更早版本已停产,不再接收更新(包括安全修复!)。

【讨论】:

  • 我想知道他是否可以使用带有旧 ODS 的 FB 2.5 出现。在 sql.ru Khorsun 曾经说过这会导致不同的错误消息,但没有人费心去检查。 // 话虽如此,他实际上可以在 FB 2.x 中执行相同的功能:使用 SProcs 代替 SFuncs 是一个众所周知的技巧,尽管需要大量样板。
  • 这是一个很好的解决方案,Mark Rotteveel。但是,我正在连接到供应商数据库,我只能查询数据库。我使用的是 2007 年的 Firebird dll。将检查是否有更新。
  • @JoanWojcicki 阅读 Firebird 2.5 SQL 参考中的“第 7.3 章。存储函数”,链接在顶级 cmets 中
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2020-08-29
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
相关资源
最近更新 更多