You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebird SQL错误码-104:未知令牌'13/04/2018'问题咨询

问题根源

你的错误核心是Firebird SQL解析器无法识别你使用的{ds ''13/04/2018''}日期语法,错误码-104正是Firebird抛出的“未知令牌”语法错误。

{ds ...}是早期Delphi BDE组件的日期格式化语法,但Firebird本身不支持这种写法。另外,就算去掉{ds}包裹,直接写'13/04/2018'也可能出问题——Firebird默认只识别ISO 8601格式的日期(YYYY-MM-DD),DD/MM/YYYY这种格式它无法自动解析。

解决方案

这里有几种可靠的修复方式,按推荐优先级排序:

1. 使用参数化查询(最推荐)

避免在SQL语句里硬编码日期,改用参数绑定的方式,既解决格式问题,又能防止SQL注入,还更灵活:

// 替换你的SQL语句为带参数的版本
TMPQuery2.SQL.Text := 'SELECT [你的字段列表] FROM [表名] WHERE DATEWORKED = :TargetDate AND [其他条件]';
// 绑定日期参数,用Delphi的日期类型直接赋值,组件会自动处理格式转换
TMPQuery2.ParamByName('TargetDate').AsDate := StrToDate('13/04/2018');
// 执行查询
TMPQuery2.ExecQuery;

2. 使用Firebird原生的ISO日期格式

直接把日期写成Firebird能识别的YYYY-MM-DD格式,去掉{ds}包裹:

DATEWORKED = '2018-04-13'

这种写法简单直接,适合静态日期的场景。

3. 用TO_DATE函数显式指定格式

如果必须保留DD/MM/YYYY的输入格式,可以用Firebird的TO_DATE函数明确告诉数据库日期的解析规则:

DATEWORKED = TO_DATE('13/04/2018', 'DD/MM/YYYY')

这样Firebird会按照你指定的格式把字符串转换成日期类型。

内容的提问来源于stack exchange,提问作者Simon King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:17:43