【问题标题】:FB3.0 Dateadd() throws syntax error in where section of queryFB3.0 Dateadd() 在查询的 where 部分抛出语法错误
【发布时间】:2019-07-08 18:10:51
【问题描述】:

我正在尝试将修改日期(字段类型:时间戳)与基于当前日期前一个月的值进行比较。使用函数 DateAdd() 时,我不断收到语法错误。

我正在使用 Libreoffice base 6.2.3.2 (x64) 和 firebird 3.0 嵌入式

使用此代码,我得到一个没有返回记录但没有错误的结果

Select *
From "tblPart"
Where "Date Modified" = Current_Timestamp

但每当我想使用 Dateadd() 函数时,都会出现错误

Select *
From "tblPart"
Where
   "Date Modified"< Dateadd(Month,-1,Current_Timestamp)

预计返回一个多月前修改过的结果列表。

错误:

SQL Status: HY000
Error code: 1000

Syntax error in SQL statement
SQL Status: HY000
Error code: 1000
SQL Status: HY000
Error code: 1000

syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE

//EDIT: 添加了我使用的程序

【问题讨论】:

  • 这些错误都不是由 Firebird 生成的。请提供minimal reproducible example 并描述您是如何执行此操作的(例如,使用哪种工具、库、编程语言等)。
  • HY000 似乎是 OpenOffice 错误,提示无法找到 JDBC 驱动程序或无法建立连接ask.libreoffice.org/en/question/33841/…
  • @Arioch'我不确定在没有得到 OP 确认的情况下添加诸如 openoffice-base 之类的标签是正确的做法。 HY000 是客户端错误的标准 SQL 状态。 Firebird 本身也经常使用它(参见 github.com/FirebirdSQL/firebird/blob/master/src/msgs/…,这是 Firebird 应用的 SQL 状态映射)
  • 我仍然不认为你使用 Firebird。你也许确实这么认为,但我认为事实并非如此。也许你使用 HSQLDB 什么的。尝试查询SELECT * FROM RDB$DATABASE - 会起作用吗?
  • 我想到的另一个可能的原因 - 我没有使用 OpenOffice Base,所以我不确定它的细节 - 如果 OpenOffice 的功能不是 Firebird 的功能,则上面的 DateAdd 功能,因此,您必须添加一些筛选,以禁止 OpenOffice 使用其自己的功能,并且只是将名称原样传递给 Firebird。 help.libreoffice.org/Basic/DateAdd_Function_Runtime我正在重新添加 OOo 标记,因为 LO 和 OOo 是仍然相当接近且基本问题可能相交的分叉。

标签: firebird dateadd libreoffice-base openoffice-base


【解决方案1】:

我遇到了同样的问题。尽管建议使用 DateAdd() 的 SQL 语句可以正常工作,但 LO Base 使用消息框回答了查询

SQL 语句中的语法错误

为什么它应该起作用

相比之下,通过在“执行 SQL 语句”窗口(LO Base 的主窗口菜单“工具”>“SQL...”)中运行成功的查询中的相同 SQL 语句。

解决方案

最终让我的查询起作用的是在工具栏或“编辑”菜单中选中“直接运行 SQL 命令”。 这可以防止 LO 在执行之前分析 SQL 查询。这失败了,因为它不理解完整的 SQL 语句(firebird 的 DateAdd() 函数),因此是上述错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多