【发布时间】:2025-12-12 01:35:01
【问题描述】:
我正在尝试做一个相当简单的查询,该查询涉及通过特定列获取两个日期之间的所有记录。
原始 SQL 在 ISQL Firebird 中运行良好:
SELECT * FROM OPS_HEADER
WHERE PB_BOL_DT
BETWEEN '2020-09-01' AND '2020-09-10';
这是我的 ActiveRecord 转换:
OpsHeader.where('pb_bol_dt BETWEEN 2020-09-01 AND 2020-09-10')
上面这行给了我这个错误:
expression evaluation not supported expression evaluation not supported Only one operand can be of type TIMESTAMP
我可能把它转换错了,但它确实似乎是这样做的确切方法......我不知道为什么它给我带来这么多麻烦。
【问题讨论】:
-
日期文字周围的引号去哪儿了?为什么不
OpsHeader.where(pb_bol_dt: '2020-09-01' .. '2020-09-10')或OpsHeader.where('pb_bol_dt between ? and ?', '2020-09-01', '2020-09-10')或OpsHeader.where('pb_bol_dt between :lower and :upper', lower: '2020-09-01', upper: '2020-09-10')? -
我已经离开游戏这么久了......这是一个很好的复习。如果您愿意,请将其作为答案放在下面,我会接受。此外,就性能而言,这些方法的工作方式是否相似?
-
使用 fbprofiler.sf.net 检查您的数据库实际从您的应用程序接收到的内容。需要 Firebird 2.5+ (TraceAPI)
标签: sql ruby-on-rails firebird isqlquery